接口

C#中,还有另外一种继承方式,这种继承方式被称作接口继承。接口以一种抽象的形式定义类型,作为方法或者其他类型的集合,从而形成该类型的约定。接口和抽象类一样,不能被直接实例化。与抽象类不同的是,接口并不提供任何的实现,接口中所有的方法与属性都是抽象的

接口是一种约定,实现一个给定接口的任何对象都一定会提供对该接口中定义的成员的实现。接口仅定义了将被实现对象提供的成员,但接口的定义没有给出关于成员的实现,只给出它们采用的参数和返回值类型,它们的实现完全由实现类承担。接口的定义格式如下:

[attributes] [modifiers] interface identifier [:base-list] 
{
    interface-body
}
attributes  (可选):附加的定性信息

modifiers (可选):允许使用的修饰符有NEW和四个访问修饰符,分别是new 、public 、protected、internal、private。在一个接口中同一修饰符不允许出现多次,new修饰符智能出现在嵌套接口中,表示覆盖了集成而来的同名成员。public 、protected、internal、private修饰符定义了对接口的访问权限,接口默认访问级别是internal。

identifier:接口名称。

base-list:接口名称。

interface-body:对接口成员的定义。

接口内可以定义的接口成员包括:方法、属性、索引器、事件。接口方法定义已命名的代码块;属性定义可以用访问器函数代码验证其有效性的变量;事件定义代码中可能发生的动作,接口不能包含常量、字段、运算符、实例构造函数、析构构造函数活类型,也不能包含静态成员。接口成员是自动public的,且不能包含任何访问修饰符,类或结构实现接口时,该类或结构将为该接口所有成员提供实现。

当类继承接口时,成为接口继承或者是接口实现,他只能继承成员的名称和签名。在实现继承中,不支持多重继承,但在接口继承中可以继承多个接口。还可以记性混合继承,即可以只继承一个基类、只继承一个或者多个接口、同时继承一个基类和一个或多个接口。其派生类都将继承该接口的实现,

C#在及城管列表中使用位置表示法指定基类和接口。如果类同时继承了一个基类和一个或多个接口,则基类总是放在第一的位置。

接口的成员及其全权名

接口的成员包括从基接口继承的成员和由接口本身声明的成员两个部分,在一个接口中可以声明零个或多个成员,这些接口成员必须是方法、属性、事件或索引器。在声明接口成员时,应遵循以下规则:
接口中的所有成员都隐式地具有public访问属性,在接口成员声明中不能使用修饰符bastract、public、protected、internal、private、virtual、override或static,否则会发生编译时错误。
一个接口方法的名称必须与同一个接口中声明的所有属性和事件的名称不同,该方法的签名不能与在同一接口中声明的其它所有方法的签名相同,并且在同一接口中声明的两种方法的签名不能只有ref和out不同。
接口成员不能包含代码体。
属性或事件的名称必须与同一接口中声明的所有其它成员的名称不同。

接口成员的访问及其二义性

对于接口成员的访问是与类中的情况相同的,并遵循着这样的规律:如果底层成员的命名与继承而来的高层成员一致,那么底层成员将隐藏同名的高层成员。但接口与类又有不同,接口允许多重继承,在多重继承中,如果两个父类接口含有同名的成员,这时将产生二义性。这种二义性也是C#取消多重继承的原因。在这种情况下,可以使用显示强制转换来解决这种二义性问题。

接口的实现

接口只有声明部分,而没有实现部分,接口的实现可分为:隐式实现和显示实现。当类或结构要实现的是单个接口时,这时可以使用隐式实现。隐式实现是指在继承接口的类或结构中完成对接口声明的实现,所实现的接口成员是属于实现类的,可以直接通过类的对象访问。如果类或者结构继承了多个接口,那么接口中相同名称成员就要显示实现。显示实现是通过使用接口的完全限定名来实现接口成员的。显示实现的成员是属于接口的,可以看成寄托在类中的实现,访问这些方法时要先把对象转换成接口对象,然后通过接口对象调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值