- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
谈谈C#中的接口
谈谈C#中的接口
接口的相关陈述
1.一个接口定义了一个契约。
2.接口可以包容方法、属性、事件、以及索引器。
3.在一个接口声明中,我们可以声明零个或者多个成员。
4.所有接口成员的默认访问类型都是public。
5.如果在接口成员声明中包括了任何修饰符,那么会产生一个编译器错误。
6.与一个非抽象类类似,一个抽象类必须提供接口中所有成员的实现,只要这些成员在这个类的基类中出现过。
?
接口的理解
1.??????? 面向接口编程利用OO的一个基本性质——多态,相同方法不同表现。可以这样想一下,client编写自己程序的时候,如果直接面向一个具体类写程序,那这个程序有个风吹草动的,那client就要受到影响,但如果面向一个接口就不同了,某个具体类变了,只知接口,不知具体类的client就可以完全不动。 都说上层领导比较好当,因为可以干的事通常对老百姓来说是虚的,越虚就越不容易错。 这个道理在OO中也是适用的。
2.?????? 换个视角看,面向接口编程反映OO的另一个方面——封装,接口将具体实现封装了起来,可以不影响客户的情况下切换实现
3.?????? 接口的作用,一言以蔽之,就是标志类的类别(type?of?class)。把不同类型的类归于不同的接口,可以更好的管理他们。OO的精髓,我以为,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(比如c++、java、c#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象。(cowboy的名言是“抽象就是抽去像的部分”,看似调侃,实乃至理)。
?
空接口的使用在接口使用的时候,空接口有2种情况:1.类似于ObjectBuilder中的,他们往往是做一个标记,表示需要某个功能.当然你也可以这么用,来表示你的类具有某个功能,实现了你的某个接口.
{
/// summary
/// Represents a builder policy interface. Since there are no fixed requirements
/// for policies, it acts as a marker interface from which to derive all other
/// policy interfaces.
/// /summary
public interface IBuilderPolicy
{
}
}
2.你的接口继承了别的接口(非空),你的接口本身没有声明函数.这种情况一般是你不希望用户使用父接口作为参数类型,因为他们的用途可能不同,此时就可以用空接口来实现.
{
string getText();
}
interface SqlText : Text
{
}
可以看到,Text接口是用于返回一个字符串.而SqlText是一个空接口
public void doQuery(SqlText sqlText)
而不是这样:
public void doQuery(Text text)
避免用户产生歧义的想法,一眼看去,就明白应该传入一个Sql字符串.
接口的成员为什么没有委托
我们都知道C#的接口是可以包含事件的,其实当我们看到事件的时候,很容易就会想到委托,委托是事件的基础,如果对委托和事件不是特别清楚的程序员就一定不会明白,为什么C#接口中可以包含事件而不能有委托呢。其实简单的说法就是委托也是类型,delegate关键字引入的是一个新的类型,所以一个C#接口无法包容一个委托并把它当作成员;而event关键字引入的是一个新的成员,因此事件可以归人接口。理解这点,我们要从C#接口的使命说起,C#接口是一个契约,规范了接口实现者的行为,而不是要有些什么。很简单,例如“党员”是个接口,它肯定有个动作是“为人民服务”,“某某党员”实现了“党员”这个接口,那么“某某党员”肯定也要“为人民服务”,至于你“某某党员”是否必须拥用“电脑”、“小孩”。那么“党员”这个接口中肯定不会有规定。这也就是接口的目的,规范了实现者的一些行为。所以C#接口的成员都是方法,不会有其它了。稍有c#常识的程序员都明白,c#中的属性,其实就是两个方法,一个Set方法,一个Get方法,同样事件和索引器也都是方法,请看下面的接口:
public interface IDrawingObject
{
event EventHandler OnDraw;
string Name
{
get;
set;
}
int this[int index]
{
get;
set;
}
您可能关注的文档
最近下载
- 最新人力资源从业资格练习题(共5套含答案).docx VIP
- 中华人民共和国环境保护法解读.pptx VIP
- 2024年高校教师资格证之高校教师职业道德通关试题库(有答案).pdf VIP
- 初中音乐《谁说女子不如男 豫剧《花…》时良华PPT课件新优质课比赛公开课获奖5.pptx VIP
- 液压与气压传动课后习题答案.pdf VIP
- 福建省厦门市2023-2024学年高一上学期期末质检地理试题 附答案.docx VIP
- 2025江苏苏州狮山商务创新发展集团有限公司下属板块公司招聘4人笔试备考试题及答案解析.docx VIP
- 供货方案及质量保证措施.docx VIP
- 森林灭火设备培训课件.pptx VIP
- 2025年多旋翼无人机超视距驾驶员执照备考题库宝典(核心题版).docx
文档评论(0)