Почему я не могу менять поля структуры, если структура хранится как свойство?

Вопрос, конечно, по чистому C#. Но тег Unity3d я поставил, потому что пример оттуда.

Есть два класса:

public class A : MonoBehaviour
{
    Vector2 vec = Vector2.zero;
    void Start()
    {
        vec.x = 10f;
    }
}

public class B : MonoBehaviour
{
    Vector2 vec {get; set; }= Vector2.zero;
    void Start()
    {
        vec.x = 10f;
    }
}

Единственное отличие - свойство (get; set; структура).

Тут стоит уточнить, что Vector2 - это структура (struct), а не класс (class). Vector2 имеет несколько полностью публичных (public) полей, одно из которых - x.

В первом классе всё замечательно! Поле x у структуры Vector2 меняется на 10f и никаких ошибок. Во втором классе есть ошибка: "CS1612 Не удалось изменить возвращаемое значение 'B.vec', т. к. оно не является переменной". Я понимаю, что присутствие свойства вызывает ошибку... Но я не понимаю почему? Свойства как-то особенно работают со структурами из-за того, что они не являются ссылочными типами?

Так вот, мой вопрос. Почему наличие свойства "{get; set;}" (и любого другого свойства с "get"-ером) запрещает мне менять поля структуры (struct)?


Ответы (0 шт):