Visual C#核心编程之继承
1、在.NET中,继承与语言无关,用一种托管语言编写的类可以继承用另一种托管语言编写的类
跨语言继承必须保证基类和派生类都遵循公共语言规范(CLS)
2、扩展方法的第一个参数必须为this,后面跟着目标类型,该类型规定了扩展方法可以在哪里应用
如果实例方法与扩展方法具有相同的签名,则实例方法被调用
如果两个扩展方法具有相同的签名,则其中一个扩展方法必须作为正常的静态方法被调用
扩展方法所属的静态类必须在作用域内,否则,该扩展方法不能被调用
3、对于虚方法,编译器喜欢调用底层的派生方法
4、基类的构造函数和析构函数不被派生类继承。对于派生类对象,默认的调用基类的默认构造函数来初始化基类的状态。如果基类没有默认构造函数,除非派生类调用基类的一个有参构造函数,否则会发生编译错误
5、接口与抽象类的比较
抽象类可以包含一些实现,而接口没有完全实现
抽象类可以继承其他接口和类,而接口只能继承其他接口
抽象类可以包含字段,接口没有状态
抽象类有构造函数和析构函数,接口两个都没有
接口可以被结构继承,抽象类不能被结构继承
6、实现了一个接口的派生类的子孙不能强制转换为该接口类型,只有直接实现一个接口的类型才能强制转换为该接口类型。然而,该类的子孙可以通过父类强制转换为该接口的类型
显式实现的接口成员在子孙类型中不能被重写
7、多态性的两大好处是晚期绑定和可扩展性
8、多态性有以下三个因素
相关的类
公共的方法
不同的行为
9、接口的多态性
10、基类或接口可用作函数参数或返回值,可以分别在被调函数和调用函数中提供多态行为。使用基类或接口作为参数或返回值的理由如下
概括了函数调用或返回值。函数参数或返回其可以使用不同的但是相关的类型
具体的参数或返回类型在编译时可能不知道。基引用支持晚期绑定、类型是在运行时选择的(多态性)
返回基类或接口限制了对对象的访问。这对于希望隐藏一个公共接口的某个部分的类库特别有用
11、