如何利用C#实现接口事件

这篇文章主要介绍“如何利用C#实现接口事件”,在日常操作中,相信很多人在如何利用C#实现接口事件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何利用C#实现接口事件”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

成都创新互联成都网站建设按需设计网站,是成都网站推广公司,为集装箱提供网站建设服务,有成熟的网站定制合作流程,提供网站定制设计服务:原型图制作、网站创意设计、前端HTML5制作、后台程序开发等。成都网站设计热线:18982081108

C#接口事件的实现是如何的呢?下面的C#接口事件示例演示如何在类中实现接口事件。实现C#接口事件的规则与实现任何接口方法或属性的规则基本相同。

C#接口事件实例:

在类中实现接口事件,在类中声明事件,然后在适当的区域调用该事件。

public interface IDrawingObject  {  event EventHandler ShapeChanged;  }  public class MyEventArgs : EventArgs {…}  public class Shape : IDrawingObject  {  event EventHandler ShapeChanged;  void ChangeShape()  {  // Do something before the event…  OnShapeChanged(new MyEventsArgs(…));  // or do something after the event.   }  protected virtual void OnShapeChanged(MyEventArgs e)  {  if(ShapeChanged != null)  {     ShapeChanged(this, e);  }  }  }

C#接口事件示例

下面的示例演示如何处理以下的不常见情况:您的类是从两个以上的接口继承的,每个接口都含有同名事件)。在这种情况下,您至少要为其中一个事件提供显式接口实现。为事件编写显式接口实现时,必须编写 add 和 remove 事件访问器。这两个事件访问器通常由编译器提供,但在这种情况下编译器不能提供。

您可以提供自己的访问器,以便指定这两个事件是由您的类中的同一事件表示,还是由不同事件表示。例如,根据接口规范,如果事件应在不同时间引发,则可以将每个事件与类中的一个单独实现关联。在下面的示例中,订户将形状引用强制转换为 IShape 或 IDrawingObject,从而确定自己将会接收哪个 OnDraw 事件。

C#接口事件代码:

namespace WrapTwoInterfaceEvents  {  using System;   public interface IDrawingObject  {  // Raise this event before drawing  // the object.  event EventHandler OnDraw;  }  public interface IShape  {  // Raise this event after drawing  // the shape.  event EventHandler OnDraw;  }    // Base class event publisher inherits two  // interfaces, each with an OnDraw event  public class Shape : IDrawingObject, IShape  {  // Create an event for each interface event  event EventHandler PreDrawEvent;  event EventHandler PostDrawEvent;   object objectLock = new Object();   // Explicit interface implementation required.  // Associate IDrawingObject's event with  // PreDrawEvent  event EventHandler IDrawingObject.OnDraw  {  add  {  lock (objectLock)  {  PreDrawEvent += value;  }  }  remove  {  lock (objectLock)  {  PreDrawEvent -= value;  }  }  }  // Explicit interface implementation required.  // Associate IShape's event with  // PostDrawEvent  event EventHandler IShape.OnDraw  {  add   {  lock (objectLock)  {  PostDrawEvent += value;  }  }  remove  {  lock (objectLock)  {  PostDrawEvent -= value;  }  }    }   // For the sake of simplicity this one method  // implements both interfaces.   public void Draw()  {  // Raise IDrawingObject's event before the object is drawn.  EventHandler handler = PreDrawEvent;  if (handler != null)  {  handler(this, new EventArgs());  }  Console.WriteLine("Drawing a shape.");   // RaiseIShape's event after the object is drawn.  handler = PostDrawEvent;  if (handler != null)  {  handler(this, new EventArgs());  }  }  }  public class Subscriber1  {  // References the shape object as an IDrawingObject  public Subscriber1(Shape shape)  {  IDrawingObject d = (IDrawingObject)shape;  d.OnDraw += new EventHandler(d_OnDraw);  }   void d_OnDraw(object sender, EventArgs e)  {  Console.WriteLine("Sub1 receives the IDrawingObject event.");  }  }  // References the shape object as an IShape  public class Subscriber2  {  public Subscriber2(Shape shape)  {  IShape d = (IShape)shape;  d.OnDraw += new EventHandler(d_OnDraw);  }   void d_OnDraw(object sender, EventArgs e)  {  Console.WriteLine("Sub2 receives the IShape event.");  }  }    public class Program  {  static void Main(string[] args)  {  Shape shape = new Shape();  Subscriber1 sub = new Subscriber1(shape);  Subscriber2 sub2 = new Subscriber2(shape);  shape.Draw();   // Keep the console window open in debug mode.  System.Console.WriteLine("Press any key to exit.");  System.Console.ReadKey();  }  }   }
/* C#接口事件示例Output:  Sub1 receives the IDrawingObject event.  Drawing a shape.  Sub2 receives the IShape event.  */

到此,关于“如何利用C#实现接口事件”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


文章标题:如何利用C#实现接口事件
文章出自:http://myzitong.com/article/pcpcdp.html