浅谈C#接口方法

1.公有方法实现C#接口方法

创新互联建站长期为上1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为云和企业提供专业的成都做网站、成都网站制作,云和网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。

尽管C#在定义接口时不用指明接口方法的访问控制方式,但默认接口方法均为public型(这可以从反编译的IL代码中看到)。下面是使用Reflector查看的接口IL代码:

 
 
 
  1. class private interface abstract auto ansi IControl{
  2. method public hidebysig newslot abstract virtual instance void Paint() cil managed{
  3. }
  4. }

实现接口的类需要实现所有接口方法。通常情况下,接口的实现方法也为public型。如下案例:

 
 
 
  1. using System ;
  2. interface IControl
  3. {
  4. void Paint();
  5. }
  6. public class EditBox: IControl
  7. {
  8. public void Paint()
  9. {
  10. Console.WriteLine("Pain method is called!");
  11. }
  12. }
  13. class Test
  14. {
  15. static void Main()
  16. {
  17. EditBox editbox = new EditBox();
  18. editbox.Paint();
  19. ((IControl)editbox)。Paint();
  20. }
  21. }

接口就好像是关系型数据库中的一对多表,一个接口对应多个接口方法,每个接口方法又对应虚拟方法表(VMT)中的某个公有或私有方法。可见通过接口对方法进行调用需要多出一道转换工作,因此执行效率不如直接调用。

2.私有方法不能实现C#接口方法

如果想将接口方法直接实现为私有方法是办不到的。下面的EditBox的代码中Paint方法没有特殊说明,默认为private,导致代码无法执行:

 
 
 
  1. using System ;
  2. interface IControl
  3. {
  4. void Paint();
  5. }
  6. public class EditBox: IControl
  7. {
  8. void Paint()
  9. {
  10. Console.WriteLine("Pain method is called!");
  11. }
  12. public void ShowPaint()
  13. {
  14. this.Paint();
  15. ((IControl)this)。Paint();
  16. }
  17. }
  18. class Test
  19. {
  20. static void Main()
  21. {
  22. EditBox editbox = new EditBox();
  23. editbox.ShowPaint();
  24. }
  25. }

程序在编译时将显示如下编译错误:“”EditBox“不会实现接口成员”IControl.Paint()“。”EditBox.Paint()“或者是静态、非公共的,或者有错误的返回类型。”

由于接口规范中的方法默认的访问权限是public,而类中的默认访问权限是default,也就是说private,因此导致权限范围收缩,两者权限并不相同,所以必须将类的权限调整为public才可以使上面的代码得以执行。

3.实现专门的C#接口方法

 
 
 
  1. using System ;
  2. interface IControl
  3. {
  4. void Paint();
  5. }
  6. public class EditBox: IControl
  7. {
  8. void Paint()
  9. {
  10. Console.WriteLine("Pain method is called!");
  11. }
  12. void IControl.Paint()
  13. {
  14. Console.WriteLine("IControl.Pain method is called!");
  15. }
  16. public void ShowPaint()
  17. {
  18. this.Paint();
  19. ((IControl)this)。Paint();
  20. }
  21. }
  22. class Test
  23. {
  24. static void Main()
  25. {
  26. EditBox editbox = new EditBox();
  27. editbox.ShowPaint();
  28. //editbox.Paint();
  29. ((IControl)editbox)。Paint();
  30. }
  31. }

网页题目:浅谈C#接口方法
当前URL:http://www.csdahua.cn/qtweb/news29/258129.html

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

广告

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