C#接口事件的实现解析

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

我们提供的服务有:成都网站制作、成都网站设计、外贸营销网站建设、微信公众号开发、网站优化、网站认证、雨城ssl等。为上1000+企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的雨城网站制作公司

C#接口事件实例:

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

 
 
 
  1. public interface IDrawingObject  
  2. {  
  3. event EventHandler ShapeChanged;  
  4. }  
  5. public class MyEventArgs : EventArgs {…}  
  6. public class Shape : IDrawingObject  
  7. {  
  8. event EventHandler ShapeChanged;  
  9. void ChangeShape()  
  10. {  
  11. // Do something before the event…  
  12. OnShapeChanged(new MyEventsArgs(…));  
  13. // or do something after the event.   
  14. }  
  15. protected virtual void OnShapeChanged(MyEventArgs e)  
  16. {  
  17. if(ShapeChanged != null)  
  18. {  
  19.    ShapeChanged(this, e);  
  20. }  
  21. }  

C#接口事件示例

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

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

C#接口事件代码:

 
 
 
  1. namespace WrapTwoInterfaceEvents  
  2. {  
  3. using System;  
  4.  
  5. public interface IDrawingObject  
  6. {  
  7. // Raise this event before drawing  
  8. // the object.  
  9. event EventHandler OnDraw;  
  10. }  
  11. public interface IShape  
  12. {  
  13. // Raise this event after drawing  
  14. // the shape.  
  15. event EventHandler OnDraw;  
  16. }  
  17.  
  18.  
  19. // Base class event publisher inherits two  
  20. // interfaces, each with an OnDraw event  
  21. public class Shape : IDrawingObject, IShape  
  22. {  
  23. // Create an event for each interface event  
  24. event EventHandler PreDrawEvent;  
  25. event EventHandler PostDrawEvent;  
  26.  
  27. object objectLock = new Object();  
  28.  
  29. // Explicit interface implementation required.  
  30. // Associate IDrawingObject's event with  
  31. // PreDrawEvent  
  32. event EventHandler IDrawingObject.OnDraw  
  33. {  
  34. add  
  35. {  
  36. lock (objectLock)  
  37. {  
  38. PreDrawEvent += value;  
  39. }  
  40. }  
  41. remove  
  42. {  
  43. lock (objectLock)  
  44. {  
  45. PreDrawEvent -= value;  
  46. }  
  47. }  
  48. }  
  49. // Explicit interface implementation required.  
  50. // Associate IShape's event with  
  51. // PostDrawEvent  
  52. event EventHandler IShape.OnDraw  
  53. {  
  54. add   
  55. {  
  56. lock (objectLock)  
  57. {  
  58. PostDrawEvent += value;  
  59. }  
  60. }  
  61. remove  
  62. {  
  63. lock (objectLock)  
  64. {  
  65. PostDrawEvent -= value;  
  66. }  
  67. }  
  68.  
  69.  
  70. }  
  71.  
  72. // For the sake of simplicity this one method  
  73. // implements both interfaces.   
  74. public void Draw()  
  75. {  
  76. // Raise IDrawingObject's event before the object is drawn.  
  77. EventHandler handler = PreDrawEvent;  
  78. if (handler != null)  
  79. {  
  80. handler(this, new EventArgs());  
  81. }  
  82. Console.WriteLine("Drawing a shape.");  
  83.  
  84. // RaiseIShape's event after the object is drawn.  
  85. handler = PostDrawEvent;  
  86. if (handler != null)  
  87. {  
  88. handler(this, new EventArgs());  
  89. }  
  90. }  
  91. }  
  92. public class Subscriber1  
  93. {  
  94. // References the shape object as an IDrawingObject  
  95. public Subscriber1(Shape shape)  
  96. {  
  97. IDrawingObject d = (IDrawingObject)shape;  
  98. d.OnDraw += new EventHandler(d_OnDraw);  
  99. }  
  100.  
  101. void d_OnDraw(object sender, EventArgs e)  
  102. {  
  103. Console.WriteLine("Sub1 receives the IDrawingObject event.");  
  104. }  
  105. }  
  106. // References the shape object as an IShape  
  107. public class Subscriber2  
  108. {  
  109. public Subscriber2(Shape shape)  
  110. {  
  111. IShape d = (IShape)shape;  
  112. d.OnDraw += new EventHandler(d_OnDraw);  
  113. }  
  114.  
  115. void d_OnDraw(object sender, EventArgs e)  
  116. {  
  117. Console.WriteLine("Sub2 receives the IShape event.");  
  118. }  
  119. }  
  120.  
  121.  
  122. public class Program  
  123. {  
  124. static void Main(string[] args)  
  125. {  
  126. Shape shape = new Shape();  
  127. Subscriber1 sub = new Subscriber1(shape);  
  128. Subscriber2 sub2 = new Subscriber2(shape);  
  129. shape.Draw();  
  130.  
  131. // Keep the console window open in debug mode.  
  132. System.Console.WriteLine("Press any key to exit.");  
  133. System.Console.ReadKey();  
  134. }  
  135. }  
  136.  
 
 
 
  1. /* C#接口事件示例Output:  
  2. Sub1 receives the IDrawingObject event.  
  3. Drawing a shape.  
  4. Sub2 receives the IShape event.  
  5. */ 

C#接口事件的实现以及使用的一些内容就向你介绍到这里,希望对你了解和学习C#接口事件有所帮助。

分享名称:C#接口事件的实现解析
网站链接:http://www.shufengxianlan.com/qtweb/news19/487319.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联