Объект уведомления о настройке элемента свойства - PullRequest
0 голосов
/ 03 августа 2011

Предположим, у нас есть следующий псевдокод:

class XY
{
    int X { get; set; }
    int Y { get; set; }
}
class Foo
{
    XY _xy;
    XY xy
    {
        get 
        {
            return _xy;
        }
        set
        {
            Write("Foo's XY is set!");
            _xy = value;
        }
    }
}

Это прекрасно работает, пока я делаю

Foo foo;
foo.xy = XY(1, 3);
XY temp = foo.xy;
temp.y = 5;
foo.xy = temp;

, но не работает для:

Foo foo;
foo.xy = XY(1, 3);
foo.xy.y = 5;      // no "Foo's XY is set!" here

Как последнего можно достичь?В частности, я имею в виду Lua (с _ index / _newindex), но я пишу пример кода на языке C #, потому что я думаю, что большинство людей это знают, и я считаю, что это более общая проблема программирования.

Ответы [ 2 ]

1 голос
/ 03 августа 2011

С чего бы это?Вы не установили Foo.xy.Вы должны реализовать какое-то уведомление для базового объекта, если вы хотите достичь этого.

В C # общий шаблон реализует интерфейс INotifyPropertyChanged на XY и подписывается на Foo.

Пример:

class XY: INotifyPropertyChanged
{
    public X { get {...} set { _x = value; PropertyChanged("X"); }}
    // implementation of interface...
}

class Foo
{
     public Foo(XY xy)
     {
          this._xy = xy;
          this._xy.PropertyChanged += delegate { Console.WriteLine("changed"); }
     }
}
0 голосов
/ 03 августа 2011

Вы на самом деле вызываете «получатель» в вашем примере.Вот почему вы не видите свой вывод.

foo.xy.y = 5

Вы не заменяете ссылку на переменную, вы извлекаете ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...