网站wordpress入侵,临颍网站建设,最新国内新闻事件今天,圣诞节网页设计模板图片第十三章 接口
类和接口继承 CLR不支持多继承#xff0c;因此所有托管编程语言都不支持任何类都从且只能从一个类派生#xff08;最终从Object类派生#xff09;定义接口实际只是对一组方法进行了统一的命名#xff0c;类通过指定接口名称来继承接口#xff0c;且必须显式…第十三章 接口
类和接口继承 CLR不支持多继承因此所有托管编程语言都不支持任何类都从且只能从一个类派生最终从Object类派生定义接口实际只是对一组方法进行了统一的命名类通过指定接口名称来继承接口且必须显式实现接口方法 接口可以定义方法、事件、无参属性和有参属性索引器不能定义构造器方法、实例字段C#中使用interface关键字定义接口根据约定接口类型名称以I开头接口可以从另一个或多个接口”继承“例:IC继承IA和IB,则继承IC的类也要实现IA和IB中定义的方法该类也视为实现了IA和IB派生类不能重写基类的接口方法因为接口方法被CLR标记为sealed,但是派生类可以重新继承同一个接口调用接口方法时会调用在该类上的实现CLR允许定义接口类型的字段、参数和局部变量接口类型的变量可以调用接口中定义的方法值类型也可以实现零个或多个接口但是值类型的实例转换为接口类型时必须装箱隐式和显式接口方法实现 隐式实现在类中定义一个和接口方法有相同参数和返回类型的方法编译器自动认为该方法匹配接口方法两个记录项使用类的对象调用方法、使用接口类型的对象调用方法将引用同一个实现显式接口方法实现EIMI在类中用接口的名称作为方法名前缀定义一个方法然后直接定义一个相同签名的方法将被视为两个方法。例:类MyClass继承接口IDisposable 隐式实现public void Dispose() {}显式实现public void Dispose() {} void IDisposable.Dispose() {}myClass.Dispose() 和 ((IDisposable)myClass).Dispose()是有区别的 泛型接口 泛型接口提供了编译时的类型安全性使用Object作为参数可能造成运行时抛出参数类型异常使用泛型接口将减少装箱使用Object时传递值类型需要装箱类可以多次实现同一个泛型接口每次实现使用不同的类型参数可以将类型参数标记为协变和逆变in、out 泛型和接口约束 可以将泛型类型参数约束为多个接口传递的参数类型必须实现接口在值类型上调用接口可以不装箱 实现多个具有相同方法名和签名的接口(两个接口中定义了相同名称和签名的方法)使用EIMI用EIMI增强编译时的类型安全性例定义CompareTo(Object other)时用EIMI定义(IComparable.CompareTo(Object other))然后在类中再定义一个CompareTo(MyClass other)获得编译时安全性和减少装箱尽量避免使用EIMI应该设计类型还是接口 类型意味着IS-A关系接口意味着CAN-DO关系从基类派生更简单因为继承接口的类必须实现所有成员而派生类型可能只需稍作改动接口无法保证所有人百分百正确实现它而基类可以默认提供一个良好的实现向基类添加新方法派生类型将自动继承向接口添加新方法所有继承者都要添加现在好像接口也可以提供默认实现了两件事情可以同时做定义接口然后定义实现该接口的基类