03.继承
时间:2011-01-23 来源:13路易的
1. 继承是“是一种”的关系(is),组合是“有一种”的关系(has)。
2. 代码重用是继承的好处之一。
3. 类可以继承一个类和多个接口,派生类不能继承基类的构造函数和析构函数。
4. 值类型和基元是密封的,因而不能被继承,例如不能创建一个继承于int的类。
5. System.object是所有类的最终基类。
6. Object.Equals是比较方法,对于引用类型,比较的是引用地址。
7. 对于引用类型,浅拷贝只复制引用地址,深拷贝复制一个新的内存空间并赋值。
8. Object.ReferenceEqulas方法比较两个对象是否是同一个对象。
9. 基类必须有比派生类相同的可访问性、或具有比派生类更大的可访问性。
10. 扩展方法应遵循如下规则:
1. 如果扩展方法和实例有相同签名的方法,则调用本身签名的方法。
2. 扩展方法如果有两个扩展方法同名那么就不能编译通过。
3. 扩展方法和实例的可访问性必须在一个作用域内,否则无法访问。
11. Virual和new修饰符问题:父类调virual方法子类实现用override则调子类override方法。子类实现用new则调父类的vriual方法;
12. 派生类不能重写基类中的数据成员或静态成员。
13. 抽象类的存在主要是为了继承。不能创建抽象类的实例。
14. 静态类和接口不支持abstract。
15. 包含一个或多个抽象成员的类一定是抽象类。
16. 继承于abstract类的子类一定要全部实现abstratc方法。
17. 基类的构造函数和析构函数不能被派生类继承,如果基类没有默认的构造函数除非派生类调用基类有参数的构造函数,否则不会被编译通过 。
18. 子类调用父类构造函数:public Achieved() : base(false);
19. 构造函数自上向下、先父类在子类,析构函数自下向上、先子类在父类。
20. 接口是强制定义行为而没有实现,我们不能创建接口的实例,接口必须被实现。
21. 接口和抽象
相同之处:
1. 两者都有在派生类实现的方法。
2. 两者都不能创建实例。
不同之处:
1. 抽象类可以有实现的部分,而接口只有定义。
2. 抽象类可以继承其他抽象类或接口,而接口只能继承其他接口。
3. 抽象类有构造函数和析构函数,而接口没有。
4. 接口可以被结构体继承,而抽象类不能。
22. 接口可以嵌套在类当中,但是不能嵌套在接口当中。
23. 定义接口或抽象类它们的界限是怎么样的?
a) 接口是做规范,而抽象类是做实现的抽象。例如全部函数或是子字段都被抽象那么一定是接口,部分需要抽象那么就需要抽象类。
24. 显式接口实现:
a) 在实现的成员名上加接口的名字,例:interfaceName.Method();
b) 接口和具体实现如果存在相同函数名的时候可以将接口设置成显式实现。
c) 显式实现只能通过接口来创建实例,不能通过继承接口来实现。
d) 显式实现另一个理由是给调用者隐含一部分结构,根据上面得出来的。
e) 多继承中可以使用interfaceName.Method()方式调用,这样可以进行区分。
25. 多态性的两大好处是晚绑定、可扩展。
26. 多态性有以下三个因素:
a) 相同的父类。
b) 公共的方法。
c) 不同的行为实现。
27. 接口是引用类型,在进行强制转换的时候都会进行装箱和拆箱操作。
28. 使用基类或接口作为参数或返回值的理由如下:
a) 参数或返回值可以使用不能行为的但类型相同的实现,这些可以做到晚绑定(多态性)。
b) 返回或参数限制了对象的访问,这样可以隐藏一个公共接口的某个部分,这样很有用。
29. Is运算符:实例 is type 如果正确则返回true,否则返回false;
30. As运算符:实例 as type 如果属于此类型或者是继承等,则返回true,否则返回false;
代码:下载