解决C#接口成员的一些问题

开发 后端
这里解决C#接口成员的一些问题,我们都知道C#接口是可以包含事件的,其实当我们看到事件的时候,很容易就会想到委托,委托是事件的基础。

C#接口成员为什么没有委托

我们都知道C#接口是可以包含事件的,其实当我们看到事件的时候,很容易就会想到委托,委托是事件的基础,如果对委托和事件不是特别清楚的程序员就一定不会明白,为什么C#接口中可以包含事件而不能有委托呢。其实简单的说法就是委托也是类型,delegate关键字引入的是一个新的类型,所以一个C#接口无法包容一个委托并把它当作成员;而event关键字引入的是一个新的成员,因此事件可以归人接口。理解这点,我们要从C#接口的使命说起,C#接口是一个契约,规范了接口实现者的行为,而不是要有些什么。很简单,例如“党员”是个接口,它肯定有个动作是“为人民服务”,“某某党员”实现了“党员” 这个接口,那么“某某党员”肯定也要“为人民服务”,至于你“某某党员”是否必须拥用“电脑”、“小孩”。那么“党员”这个接口中肯定不会有规定。这也就是接口的目的,规范了实现者的一些行为。所以C#接口成员都是方法,不会有其它了。稍有c#常识的程序员都明白,c#中的属性,其实就是两个方法,一个Set方法,一个Get方法,同样事件和索引器也都是方法,请看下面的接口:

  1. publicinterfaceIDrawingObject  
  2. {  
  3. eventEventHandlerOnDraw;  
  4. stringName  
  5. {  
  6. get;  
  7. set;  
  8. }  
  9. intthis[intindex]  
  10. {  
  11. get;  
  12. set;  
  13. }  
  14. voidSetValue();  

该接口包含了C#接口所能接纳的所有成员,事件,属性,索引器,方法。把该接口编译后,我们用MSIL Disassembler工具查看一下:

MSIL Disassembler工具

这下大家都明白了,其实属性Name对应于Get_Name(),Set_Name()这两个方法,事件OnDraw对应于add_OnDraw(),remove_OnDraw()这两个方法,索引器对应于get_Item(),set_Item()这两个方法。在看下面的委托和类的定义:

  1. publicdelegatevoidTestEventDelegate(objectsender,System.EventArgse);  
  2. classTestClass  
  3. {  
  4. publicvoidSetValue(){  
  5. }  

委托和类的定义

看到了吧,定义一个委托和定义一个类是没有什么区别的,都是定义了个新的类型。所以C#接口是不能有委托的,除非微软告诉我们C#接口中是可以定义类的。以上介绍C#接口成员

【编辑推荐】

  1. 分析C#不安全代码
  2. 浅析C#调用ImageAnimator
  3. C#连接Access、SQL Server数据库
  4. 浅谈C#固定的和活动的变量
  5. 介绍C#中的值类型
责任编辑:佚名 来源: 博客园
相关推荐

2016-10-18 22:10:02

HTTP推送HTML

2011-03-08 14:28:03

proftpdGentoo

2009-11-30 13:51:28

VS2003 Runt

2018-06-12 15:39:41

容器部署云平台

2009-06-12 10:25:42

Webservices

2022-01-16 08:04:44

集群部署canal

2018-05-17 14:52:11

Javascripthtmlcss

2009-06-10 21:46:02

JavaScript与

2010-05-04 15:59:05

Oracle字符集

2012-12-19 11:40:13

思科路由器

2010-09-17 15:41:46

网络协议分析软件

2021-10-21 06:52:17

Vue3组件 API

2011-01-26 16:24:53

Sun甲骨文

2009-11-23 13:44:33

PHP5面向对象

2009-08-13 16:41:12

C#结构

2009-06-18 15:14:53

Spring osgi

2017-10-13 12:23:17

苹果

2010-08-31 14:13:48

DB2数据库

2011-11-01 09:29:08

Android 4.0

2011-05-31 17:50:07

白盒测试
点赞
收藏

51CTO技术栈公众号