Разница между вызовом методов класса и структур

347
02 января 2017, 21:11

Имеется такая ситуация

struct Point
{
   int x;
   int y;
   public void SetX(int a){ ...  }
   public void SetY(int a){ ...  } 
}
class A
{
   Point cord = new Point(); 
   public Point Cord      
   {
     get { return cord; }  
   }
   public void MethodA(int a)
   {
       cord.SetX(a);   //здесь все ок
   }
}
class B
{
   A myObj = new A();
   public Point Cord      
   {
     get { return cord; }  
   }
   public void MethodB(int a)
   {
       myObj.Cord.SetX(a);   //а здесь не присваивает значение
   }
}

В классе А метод отрабатывает верно, а в классе B нет( заходит в метод , где то чему то значение присваивает , но в объекте myObj и в его поле cord типа Point нет) Интересно чему все таки это значение присваивается и почему с классами работает, а со структурой нет.

Answer 1

Потому что структура это ValueType и копируется полностью.

В результате вызова

get { return cord; } 

Будет новый объект структуры, в котором ты и вызываешь метод SetX.

READ ALSO
Как очистить DatePicker

Как очистить DatePicker

Выбранная дата в DatePicker биндится к свойству во ViewModel

651
Выделение памяти List C#

Выделение памяти List C#

Краткий, может быть глупый вопрос: как при создании List<тип> выделить сразу память под n Элементов? Конструктор позволяет задать только примерную...

439
Generic или не Generic

Generic или не Generic

В обсуждении моего ответа на вопрос возник один спорный момент

362
Запрос на сервер и выборка файла из базы

Запрос на сервер и выборка файла из базы

Привет изучаю сокеты на c# и для практики есть такая идеяЕсть два простеньких приложения сервер и клиент

372