как реализовать уведомление об изменении объекта - PullRequest
3 голосов
/ 25 декабря 2010

У меня обычный обычный класс, например:

public class ObjectA
{
    public string val {get;set;}
    ...
}

в другом классе, он содержит экземпляр ObjectA, например:

public class ObjectB
{
     private ObjectA objectA;
     ....
}

экземпляр "objectA"часто меняется.Я имею в виду, что в ObjectB некоторые методы будут создавать новый и новый экземпляр объекта A и назначать «objectA»

. Есть ли способ реализовать триггер, когда изменение экземпляра objectA позволитсделать что-нибудь, например:

objectA += OnChanged_ObjectA   

protected void OnOnChanged_ObjectA()
{
    // do something
}

Ответы [ 3 ]

3 голосов
/ 25 декабря 2010

Вы можете создать событие изменения на ObjectA, которое будет запускаться для любых изменений, которые вы хотите отслеживать. Это позволит вам подписаться на это событие на любом другом объекте, включая ObjectB.

В Object1.cs:

// Delegate type for the event handler
public delegate void MyEventHandler();

// Declare the event.
public event MyEventHandler MyEvent;

// In the properties or any place you what to notify of change:
if (MyEvent != null)
      MyEvent();

А на Object2.cs можно подписаться:

objectA.MyEvent += OnChanged_ObjectA


protected void OnOnChanged_ObjectA()
{
    // Action changes
}
2 голосов
/ 25 декабря 2010

Как насчет: Интерфейс INotifyPropertyChanged

http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx

0 голосов
/ 25 декабря 2010

У меня недавно была такая проблема, но, к сожалению, я не нашел другого решения, кроме этого:

public ObjectB
{
    private ObjectA _objectA;
    public  ObjectA objectA
    {
        get 
        { 
            return _objectA; 
        }
        set
        {
            if (value != _objectA)
            {
                _objectA = value;
                RaiseObjectAChanged(/* sender, args */);
            }
        }
    }
    private RaiseObjectAChanged()
    {
        // raise event here
    }
    private OnObjectAChanged()
    {
        // event handler
    }
}
...