在窗体编程过程中,常常会封装一个基类,包含未来业务中常用的属性、方法、委托、事件等,但是事件作为一个特殊的委托,只能在声明类中调用,派生类都不可以调用,所以在基类中必须实现一个虚函数,实现事件的调用,然后在派生类中重写该方法,并调用基类的方法。代码如下:
1 public interface IDrawingObject 2 { 3 event EventHandler ShapeChanged; 4 } 5 public class MyEventArgs : EventArgs 6 { 7 // class members 8 } 9 public class Shape : IDrawingObject 10 { 11 public event EventHandler ShapeChanged; 12 void ChangeShape() 13 { 14 // Do something here before the event… 15 16 OnShapeChanged(new MyEventArgs(/*arguments*/)); 17 18 // or do something here after the event. 19 } 20 protected virtual void OnShapeChanged(MyEventArgs e) 21 { 22 ShapeChanged?.Invoke(this, e); 23 } 24 }