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

4
我希望每当我的类中的属性被设置时,能够触发一个事件。我希望无论哪个属性被设置,都能触发此事件(我有大约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应用程序中默认提供的“开箱即用”事件。你有什么建议吗?


看一下这个问题,它就是你要找的:http://stackoverflow.com/questions/2264533/listener-c-like-java/2264547#2264547 - IordanTanev
2个回答

7

使用INotifyPropertyChanged是正确的方法(因为它是.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
} 

这是编写代码的最直接方式(适合学习,但不适用于规模较大的实际应用程序)。


1
这确实是常规的做法。我还鼓励您在设置字段并引发事件之前检查mHeight是否实际上改变为不同的值。否则,如果UI侦听事件并设置成员,则可能会陷入无限事件级联中。 - munificent
好的观点 - 检查值是否实际改变非常有用。 - Tomas Petricek

7

@contactmatt 它主要用于WPF开发。 - Esteban

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接