接口里为什么不能包含委托
接口里为什么可以有事件,而不能包含和事件息息相关的委托呢?
先测试一下如果在接口里面包含一个委托会有什么反应。
在接口里添加一个委托后,编译的时候编译器会提示“接口不能包含类型定义”。
原因很明确:接口的使命就是对外公布它可以完成什么样的功能,仅仅是告诉其他的使用者它可以做什么,某些程度上来说是接口只能包含方法。
而一个像“delegate void TestDelegate();”委托的声明实际上像是一个宏的使用,编译的时候由编译器负责把这一个语句扩展成一个继承于MulticastDelegate类的类声明。然后在使用接口的时候“TestDelegate test = new TestDelegate(Test);”实际上就是在构造一个类TestDelegate的对象。
类里面可以包含类型声明,所以类里面可以包含委托,但是接口里面不能。
但是为什么接口里面可以包含事件和索引器呢?
实际上一个事件的声明在编译后就转变成了两个方法,Add_XXX()和Remove_XXX()方法,这两个方法用于往事件里面添加或移除响应事件的方法。而索引器则更是一个像GetItem(int index)方法的简写形式。
转载自csdn
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述