接口里为什么不能包含委托
来源:互联网 发布:广州游泳培训.知乎 编辑:程序博客网 时间:2024/06/10 12:00
接口里为什么可以有事件,而不能包含和事件息息相关的委托呢?
先测试一下如果在接口里面包含一个委托会有什么反应。
在接口里添加一个委托后,编译的时候编译器会提示“接口不能包含类型定义”。
原因很明确:接口的使命就是对外公布它可以完成什么样的功能,仅仅是告诉其他的使用者它可以做什么,某些程度上来说是接口只能包含方法。
而一个像“delegate void TestDelegate();”委托的声明实际上像是一个宏的使用,编译的时候由编译器负责把这一个语句扩展成一个继承于MulticastDelegate类的类声明。然后在使用接口的时候“TestDelegate test = new TestDelegate(Test);”实际上就是在构造一个类TestDelegate的对象。
类里面可以包含类型声明,所以类里面可以包含委托,但是接口里面不能。
但是为什么接口里面可以包含事件和索引器呢?
实际上一个事件的声明在编译后就转变成了两个方法,Add_XXX()和Remove_XXX()方法,这两个方法用于往事件里面添加或移除响应事件的方法。而索引器则更是一个像GetItem(int index)方法的简写形式。
- 接口里为什么不能包含委托
- C#接口介绍-接口为什么不能使用委托
- PHP的单引号里不能包含变量
- 单元测试为什么不能包含集成测试
- 为什么文件名不能包含下列任何字符 \/:*?“<>|
- 在论坛里为什么不能发问题
- DLL 里为什么不能注册勾子?
- Android 为什么AlertDialog 里不能使用getapplicationcontext
- 为什么接口里声明的都是常量
- javascript里为什么不能把</script>放到字符串里
- 为什么接口中不能定义变量
- 接口为什么不能有构造函数
- 接口为什么不能有构造函数
- java 为什么接口不能实例化
- struts 2中为什么抽象包不能包含action?
- interface & abstract class 为什么不能包含static 方法!
- 为什么不能在web页面里查询数据库?
- 为什么不能在右键“打开方式”里选择“选择程序”
- mysql存储过程基本函数
- 如何隐藏TabControl中TabPage的页标签?
- MYSQL出错代码列表
- 怎样使用combobox的显示值和实际值
- DHTML实例解析:用HTC统一定制表单样式
- 接口里为什么不能包含委托
- 挑战水晶报表,润乾还不够资格
- HTC教程
- LabVIEW与视频播放
- 使用XSLT将XML数据转换成HTML
- 时间
- 验证身份证号码真伪
- 股市投资指标学习-1-kdj
- java中的String对象,你到底了解多少?