小编给大家分享一下如何解决C#接口成员的一些问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
C#接口成员为什么没有委托
我们都知道C#接口是可以包含事件的,其实当我们看到事件的时候,很容易就会想到委托,委托是事件的基础,如果对委托和事件不是特别清楚的程序员就一定不会明白,为什么C#接口中可以包含事件而不能有委托呢。其实简单的说法就是委托也是类型,delegate关键字引入的是一个新的类型,所以一个C#接口无法包容一个委托并把它当作成员;而event关键字引入的是一个新的成员,因此事件可以归人接口。理解这点,我们要从C#接口的使命说起,C#接口是一个契约,规范了接口实现者的行为,而不是要有些什么。很简单,例如“党员”是个接口,它肯定有个动作是“为人民服务”,“某某党员”实现了“党员” 这个接口,那么“某某党员”肯定也要“为人民服务”,至于你“某某党员”是否必须拥用“电脑”、“小孩”。那么“党员”这个接口中肯定不会有规定。这也就是接口的目的,规范了实现者的一些行为。所以C#接口成员都是方法,不会有其它了。稍有c#常识的程序员都明白,c#中的属性,其实就是两个方法,一个Set方法,一个Get方法,同样事件和索引器也都是方法,请看下面的接口:
publicinterfaceIDrawingObject { eventEventHandlerOnDraw; stringName { get; set; } intthis[intindex] { get; set; } voidSetValue(); }
该接口包含了C#接口所能接纳的所有成员,事件,属性,索引器,方法。把该接口编译后,我们用MSIL Disassembler工具查看一下:
这下大家都明白了,其实属性Name对应于Get_Name(),Set_Name()这两个方法,事件OnDraw对应于add_OnDraw(),remove_OnDraw()这两个方法,索引器对应于get_Item(),set_Item()这两个方法。在看下面的委托和类的定义:
publicdelegatevoidTestEventDelegate(objectsender,System.EventArgse); classTestClass { publicvoidSetValue(){ } }
看到了吧,定义一个委托和定义一个类是没有什么区别的,都是定义了个新的类型。所以C#接口是不能有委托的,除非微软告诉我们C#接口中是可以定义类的。
以上是“如何解决C#接口成员的一些问题”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。