В следующем коде есть проблема с запуском с непредвиденными ссылками, полученными путем назначения инструкции приращения постфикса/префикса, как показано ниже в коде. Также может ли кто-нибудь предложить мне способ лечения объектов как типов значений в C#, как предложено ниже, если они есть?Перегрузка операторов префикса и Postfix в C#
Я считаю, что код хорошо документирован с комментариями, разъясняющими каждое важное состояние. Не стесняйтесь задавать любые вопросы, касающиеся разъяснения кода или проблемы.
Заранее благодарен.
class Test {
public int x;
public Test(int x) { this.x=x; }
public Test() { x=0; }
static public Test operator++(Test obj) {
return new Test(obj.x+1);
}
}
// In implementing module
// Prefix/Postfix operator test for inbuilt (scalar) datatype 'int'
int x=2;
int y=++x; // 'y' and 'x' now both have value '3'
Console.WriteLine(x++); // Displays '3'
Console.WriteLine(++x); // Displays '5'
Console.WriteLine(ReferenceEquals(x,y)); // Displays 'False'
// Prefix/Postfix operator test of class type 'Test'
Test obj=new Test();
obj.x=1;
Console.WriteLine(obj++); // Must have displayed '1', displays the object type (Test.Test)
Console.WriteLine(++obj); // Must have displayed '3', again displays the object type (Test.Test)
Console.WriteLine(obj.x); // Displays '3' (as expected)
Test obj2=++obj; // Must have the value '4' and must NOT be the reference of obj
// Alternative solution to the above statement can be : 'Test obj2=new Test(++obj);' but isn't there a way to create a new value type in C# by the above statement ??!! (In C++, it can be acheived by overloading the '=' operator but C# doesn't allow it)
Console.WriteLine(obj2.x); // Displays '4' (as expected)
Console.WriteLine(ReferenceEquals(obj,obj2)); // Must display 'False' but displays 'True' showing that 'obj2' is the reference of 'obj'
Ну да, вы не переопределили 'ToString()'. В этот момент половина ваших возражений уходит. Это действительно поможет, если вы напишете [mcve], демонстрирующий проблему * single *. –
@ user3185569: Я удалил этот бит комментария. Мне кажется, что часть «obj» и «obj2» должна быть в порядке ... Это не помогает в том, что здесь так много проблем. –
На самом деле нет, я вижу, что не так с частью 'Test obj2 = ++ obj'. Будет добавлен ответ для этого. –