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

网友投稿 191 2024-02-02


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

本文主要介绍"怎么利用C#实现接口事件",希望能够解决您遇到有关问题,下面我们一起来看这篇 "怎么利用C#实现接口事件" 文章。

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 IDrawingObjects event with  // PreDrawEvent  event EventHandler IDrawingObject.OnDraw  {  add  {  lock (objectLock)  {  PreDrawEvent += value;  }  }  remove  {  lock (objectLock)  {  PreDrawEvent -= value;  }  }  }  // Explicit interface implementation required.  // Associate IShapes 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 IDrawingObjects event before the object is drawn.  EventHandler handler = PreDrawEvent;  if (handler != null)  {  handler(this, new EventArgs());  }  Console.WriteLine("Drawing a shape.");   // RaiseIShapes 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#实现接口编程:本文主要介绍"怎么利用C#实现接口编程",希望能够解决您遇到有关问题,下面我们一起来看这篇 "怎么利用C#实现接口编程" 文章。C#接口编程实例问题的解决之前我们来看看事件的创建过程,用event修饰符来代表一个事 ...


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:接口管理服务平台,管理您的接口从未如此简单和高效
下一篇:接口管理的平台,优化工作流程和提高效率的关键
相关文章

 发表评论

暂时没有评论,来抢沙发吧~