C#:在GET / SET属性上为类创建事件

时间:2010-02-20 16:30:04

标签: c# events oop delegates

我希望每次我的班级中的某个属性设置时都会触发一个事件。我希望能够在设置我的某个属性时触发同一事件。我有(大约12个)

public class MyClass
{
    private int _myHeight;
    private int _myWidth;

public int myHeight
{
    get { return myHeight; }
    set { myHeight = value;
         //This fires event! 
         }
}
public int myWidth
{
    get { return myWidth; }
    set { myWidth = value;
         //This will fire the same event! 
}

我对事件本身并不陌生,而是创造事件的新手。我一直使用Windows应用程序中使用的“开箱即用”事件。有什么想法吗?

2 个答案:

答案 0 :(得分:6)

您应该在课堂上实施INotifyPropertyChanged来实现这一目标。这是一个example

答案 1 :(得分:5)

使用INotifyPropertyChange是正确的方法(因为它是.NET中广泛使用的类型,所以任何人都可以理解你的意图)。但是,如果您只想要一些简单的代码,那么您的类的实现可能如下所示:

public class MyClass 
{ 
  private int _myHeight; 
  public event EventHandler Changed;

  protected void OnChanged() {
    if (Changed != null) Changed(this, EventArgs.Empty);
  }

  public int myHeight 
  { 
    get { return myHeight; } 
    set {
      myHeight = value; 
      OnChanged();
    } 
  }
  // Repeat the same pattern for all other properties
} 

这是编写代码的最直接的方法(这可能对学习有好处,对于更大的实际应用程序也有害)。