Как вы пишете свойство, чтобы вы могли получить доступ к внутренним переменным? - PullRequest
1 голос
/ 23 сентября 2011

У меня есть свойство, заключающее прямоугольник, я назвал его Window.Когда я пытаюсь использовать свойство для изменения местоположения или значения «X» прямоугольника, я получаю сообщение об ошибке: «Невозможно изменить возвращаемое значение Window, поскольку оно не является переменной».

Теперь язнаю, что я могу просто получить доступ к переменной, но я бы предпочел иметь возможность просто изменить значение "X".Я также не хочу создавать новый прямоугольник каждый раз, когда меняю его.

Так есть ли что-то, что я могу добавить к своему свойству, которое позволит мне изменять значение X через свойство?

Здесь я пытаюсь использовать свойство:

Window.X -= amount;

Здесь у меня есть свойство:

private Rectangle _window;
public Rectangle Window
{
    get { return _window;}
    set
    {
        if (/*condition*/)
            _window = value;
    }
}

Ответы [ 3 ]

7 голосов
/ 23 сентября 2011

Проблема в том, что Rectangle равно struct. Метод доступа к свойствам на самом деле является методом, и когда он возвращает структуру, он просто копируется, поэтому вы не можете изменить базовую структуру таким образом.

Решения:

  1. Если Rectangle - ваш код, сделайте его классом.
  2. r = Window; r.X -= amount; Window = r;

Кстати, вы должны поблагодарить C # компилятор за это, потому что технически он может модифицировать этот X, но это будет поле / опора временного объекта, что позже сделает отладку адом для вас. В C ++ он фактически компилируется.

Также это хороший пример того, почему структуры должны быть неизменными. У тебя просто не было бы этого искушения.

1 голос
/ 23 сентября 2011

Rectangle - это struct - следовательно, ваше свойство возвращает значение , а не переменную.

0 голосов
/ 23 сентября 2011

Это не работает, потому что System.Drawing.Rectangle определяется как структура (тип значения).

Это недопустимо, потому что, когда вы ссылаетесь на свойство, вы получаете копию значения (структура).Поэтому назначение свойства X для структуры влияет на свойство Window.

...