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

我们提供的服务有:成都网站制作、成都网站设计、外贸营销网站建设、微信公众号开发、网站优化、网站认证、雨城ssl等。为上1000+企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的雨城网站制作公司
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#接口事件有所帮助。
                名称栏目:C#接口事件的实现解析
                
                URL地址:http://www.csdahua.cn/qtweb/news19/487319.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网