欢迎来到天天文库
浏览记录
ID:44304493
大小:156.67 KB
页数:9页
时间:2019-10-20
《深入剖析C#的接口》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、深入剖析C#的接口一.接口概述接口(interface)用来定义-种程序的协定。实现接口的类或者结构耍与接口的定义严格一致。有了这个协定,就可以抛开编程语言的限制(理论上)。接口可以从多个基接口继承,而类或结构可以实现多个接口。接口可以包含方法、属性、事件和索引器。接口本身不提供它所定义的成员的实现。接口只指定实现该接口的类或接口必须提供的成员。接口好比一种模®,这种模版定义了对象必须实现的方法,其冃的就是让这些方法町以作为接口实例被引川。接口不能被实例化。类可以实现多个接口并且通过这些实现的接口被索引。接口变量只能索引实现该接口的
2、类的实例。二越接口从技术上讲,接口是组包含了函数型方法的数据结构。通过这组数据结构,客八代码可以调用组件对喙的功能。说明:•C#中的接口是独立于类來定义的。这与C卄模型是对立的,在C卄中接口实际上就是抽象基类。•而类可以继承一个基类,接口根本不自劉冰类。这种模型避免了C卄的多继承问题,C卄中不同基类中的实现口J能出现冲突。因此也不再需要诸如虚拟继承和显式作川域这类复杂机制。C#的简化接口模型冇助于加快应川程序的开发。■一个接口定义一个只冇抽彖成员的弓I用类型。C#中一个接口实际所做的,仅仅只存在着方法标,忐,但根本就没冇执行代码。这
3、就喑示了不能实例化•个接口,只能实例化一个派牛自该接口的对象。•接口可以定义方法、属性和索引。所以,对比•个类,接口的特殊性是:当定义-个类时,可以派牛自多重接口,而你只能町以从仅有的一个类派生。•接口可以是命名空间或类的成员,并且可以包含下列成员的签名:方法、属性、索引器。•一个接口可从一个或多个基接口继承。接口这个概念在C#和Java中非常相似。接口的关键词是interface,—个接口可以扩展一个或者多个其他接口。按照惯例,接口的名字以大写字母T开头。下面的代码是C#接口的一个例了,它与Java中的接口完全一样:interfa
4、ceIShape{voidDraw();}如果你从两个或者两个以上的接口派牛•,父接口的名字列表川逗号分隔,如卜両的代码所示:interfaceINewInterface:IParentlzIParent2{}三.定义接口成员接口可以包含一个和多个成员,这些成员可以是方法、属性、索引指不器和事件,但不能是常量、域、操作符、构造函数或析构函数,而且不能包含任何静态成员。接口定义创建新的定义空间,并且接口定义肓接包含的接口成员定义将新成员引入该定义空间。说明:•接口的成员是从基接口继承的成员和由接口木身定义的成员。•接口定义可以定义零个
5、或多个成员。接口的成员必须是方法、属性、事件或索引器。接口不能包含常数、字段、运算符、实例构造断数、析构函数或类烈,也不能包含任何种类的静态成员。•定义一个接口,该接口对于每种可能种类的成员都包含一个:方法、属性、事件利嗦引器。•接口成员默认访问方式是public。接口成员定义不能包含田可修饰符,比女I咸员定义前不能加abstract,public,protected,intemaLprivate,virtual,ovenide或sialic修饰j符。•接口的成员之间不能和互同名。继承而来的成员不用再定义,但接口可以定义与继承而来的
6、成员同名的成员,这时我们说接口成员覆盖了继承而来的成员,这不会导致错谋,但编译器会给出一个警告。关闭警告提示的方式是在成员定义前加上一个new关键字。但如果没有覆盖父接口中的成员,使用new关键字会导致编译器发出警告。•方法的名称必须与同一接口中定义的所有属性和事件的名称不同。此外,方法的签名必须与同一接口中定义的所有其他方法的签名不同。•属性或事件的名称必须与同一接口屮定义的所有其他成员的名称不同。•一个索弓
7、器的签名必须区别于在同一接M中定义的其他所有索引器的签名。•接口方法声明中的属性(attributes),返回类型(ret
8、um-type),标识符(identifier),和形式参数列表(formal-paramc(cr-lis)与个类的方法声明屮的那些有相同的意义。一个接口方法声明不允许指定•个方法丄体,而声明通常用•个分号结束。•接口属性声明的访问符与类属性声明的访问符相对应,除了访问符主体通常必须用分号。因此,无论属性是读写、只读或只写,访问符都完全确定。•接口索引声明”啲丿肉性(attributes),类型(type),和形式参数列表(formal-parameter-list)类的索引声明的那些有相同的意义。下面例子中接口IStringLis
9、t包含每个nJ能类型成员的接口:一个方法,一个属性,一个事件和一个索引。publicdelegatevoidStringListEvent(IStringListsender);publicinterfaceIStringList{v
此文档下载收益归作者所有