Информация об изменениях

Сообщение Re[3]: Передать this в виде object от 15.03.2024 10:53

Изменено 15.03.2024 10:56 Serginio1

Re[3]: Передать this в виде object
Здравствуйте, drVanо, Вы писали:


S>>Тут два варианта с боксингом унбоксингом и без него

S>>
S>>   public void Move(int a, int b)
S>>   {
S>>       // MoveObject(ref this, a, b);
S>>       object obj = this;
S>>       MoveObject(ref obj, a, b);
S>>       this= (Point)obj;
S>>       Console.WriteLine("point from this: {0}.{1}", x, y);
S>>   }
S>>


V>Дак это вы просто копируете содержимое копии обратно в this

Так в этом и заключается боксинг унбоксинг.
Приведя структуру к объекту ты создаешь новый объект. Изменяешь его и должен обратно его присвоить структуре.

Интересные моменты в C# (boxing unboxing)

Не хочешь боксинга используй ref структуры

 public void Move(int a, int b)
 {
     MoveObject(ref this, a, b);
     Console.WriteLine("point from this: {0}.{1}", x, y);
 }

 static void MoveObject(ref Point p, int a, int b)
 {
  
     p.x += a;
     p.y += b;
     Console.WriteLine("point from object: {0}.{1}", p.x, p.y);
 }
Re[3]: Передать this в виде object
Здравствуйте, drVanо, Вы писали:


S>>Тут два варианта с боксингом унбоксингом и без него

S>>
S>>   public void Move(int a, int b)
S>>   {
S>>       // MoveObject(ref this, a, b);
S>>       object obj = this;
S>>       MoveObject(ref obj, a, b);
S>>       this= (Point)obj;
S>>       Console.WriteLine("point from this: {0}.{1}", x, y);
S>>   }
S>>


V>Дак это вы просто копируете содержимое копии обратно в this

Так в этом и заключается боксинг унбоксинг.
Приведя структуру к объекту ты создаешь новый объект. Изменяешь его и должен обратно его присвоить структуре.

Упаковка-преобразование и распаковка-преобразование

Интересные моменты в C# (boxing unboxing)


Не хочешь боксинга используй ref структуры

 public void Move(int a, int b)
 {
     MoveObject(ref this, a, b);
     Console.WriteLine("point from this: {0}.{1}", x, y);
 }

 static void MoveObject(ref Point p, int a, int b)
 {
  
     p.x += a;
     p.y += b;
     Console.WriteLine("point from object: {0}.{1}", p.x, p.y);
 }