декоратор внутри класса и декорированный метод класса без «я» дает странные результаты

Теперь вы уже знаете, что является источником ошибки. Если конструктор не существует с перегрузкой, чтобы взять ваше свойство (в данном случае X), вы можете использовать инициализатор объекта (который будет делать все магическое за кулисами). Не важно, чтобы ваши структуры не были неизменными, а просто предоставляли дополнительную информацию:

struct Point
{
    public int X { get; set; }
    public int Y { get; set; }
}

class MyClass
{
    public Point Origin { get; set; }
}

MyClass c = new MyClass();
c.Origin.X = 23; //fails.

//but you could do:
c.Origin = new Point { X = 23, Y = c.Origin.Y }; //though you are invoking default constructor

//instead of
c.Origin = new Point(23, c.Origin.Y); //in case there is no constructor like this.

Это возможно, потому что это происходит за кулисами:

Point tmp = new Point();
tmp.X = 23;
tmp.Y = Origin.Y;
c.Origin = tmp;

Это выглядит как Очень странная вещь, чтобы сделать, совсем не рекомендуется. Просто перечислите альтернативный путь. Лучший способ сделать это - сделать структуру неизменной и создать соответствующий конструктор.

1
задан bevotam 28 September 2010 в 01:04
поделиться