Предоставить атрибуты класса с помощью метода доступа - PullRequest
4 голосов
/ 31 июля 2010

Я не знаю правильных технических терминов для описания моего вопроса, поэтому приведу пример:

    private Point _PrivateVect = new Point();
    public Point Publicvect
    {
        get
        {
            return _PrivateVect;
        }
        set
        {
            _PrivateVect = value;
        }
    }

Проблема в том, что если я хочу получить доступ к Publicvect.X, я получаю ошибкуCannot modify the return value of 'Publicvect' because it is not a variable.Это можно обойти?Или мне просто нужно сделать Publicvect = new Point(NewX, Publicvect.Y); навсегда?

Ответы [ 2 ]

2 голосов
/ 31 июля 2010

Еще одна причина, по которой изменчивые структуры - это зло.Одним из обходных путей является предоставление размеров для удобства:

public Point PublicX {
    get {return _PrivateVect.X;}
    set {_PrivateVect.X = value;}
}
public Point PublicY {
    get {return _PrivateVect.Y;}
    set {_PrivateVect.Y = value;}
}

Но другое, что это;да, вам нужно будет каждый раз делать new Point(x,y), так как Point является структурой.Когда вы обращаетесь к нему через свойство, вы получаете копию его, поэтому, если вы измените копию, а затем отбросите копию, вы просто потеряете изменение.

1 голос
/ 31 июля 2010

Проблема, с которой вы столкнулись, заключается в том, что тип Point - Value Type. Поэтому, когда вы манипулируете Pointvect.X, вы действительно манипулируете временной копией типа значения, что, конечно, не влияет на исходный экземпляр.

...