/// <summary>
 /// 重写基类方法,然后用base关键字调用基类方法
 /// 间接实现在子类中调用事件
 /// </summary>
 /// <param name="e"></param>
 protected override void OnShapeChanged(ShapeEventArgs e)
 {
     base.OnShapeChanged(e);
 }
 protected virtual void OnShapeChanged(ShapeEventArgs e)
 {
     EventHandler<ShapeEventArgs> handler = ShapeChanged;
     if (handler != null)
     {
         handler(this, e);
     }
 }
 private static void HandleShapeChanged(object sender, ShapeEventArgs e)
 {
     Shape s = (Shape)sender;
     Console.WriteLine("Received event.Shape area is now {0}", e.NewArea);
     s.Draw();
 }