- 一个子类不可以继承多个父类,继承的两个特性:传递性,单根性。
父类可以有多个子类,子类只能有一个父类。 - 多态就是同一操作作用于不同类的实例,不同的类将进行不同的解释,最后产生不同的结果。
- 任何类都可以从另外一个类继承,这就是说这个类拥有它继承除私有成员外的所有成员。
- 调用父类的构造函数时:
在默认情况下c#中使用new创建子类对象时,首先调用父类无参构造函数,在调用子类构造函数 最后在输出调用的类。例题p84. - 使用base关键字调用父类构造函数:
有时为了数据的安全性,并没有将父类的所有成员都暴露给子类,如私有成员的字段或属性,但使用者却希望在构造子类对象时,初始化父类的私有字段或属性。这时只需要在父类中定义相关的构造函数,并在子类中使用base调用即可。
这里的base可以认为它是父类的引用,base()就代表父类构造函数,在子类中还可以使用base调用父类的成员,且只能在子类中使用。 - C#支持的继承传递没有限制传递次数,但可以使用关键字 sealed 定义类,让该类无法派生子类,这个就是c#中的密封类。
- 访问与隐藏成员
使用 new修饰符可以显示的隐藏父类继承的成员,若要隐藏继承成员,须使用相同名称在派生类中声明该成员,并用new修饰符修饰它
解决前面的问题可以使用new关键字定义子类中的成员,同时可以使用base访问父类的成员,这样程序就可以区分该同名成员是子类特有的还是继承自父类。 - 强制类型转换:
第一个: ((父类)变量).方法名
第二个: if(变量名 is 父类)
{
//将子类强制转换为父类后,调用隐藏的方法
(子类 as 父类).方法名
} - 多态
虚方法:c#中的virtual 关键字,用于将方法定义为支持多态的虚方法。被关键字 virtual定义的类方法。
C#中override关键字,用于子类中修改父类方法的实现。采用override重写的方法,在父类必须定义为 virtual(虚方法)和abstract(抽象方法)
Virtual关键字使用规则:
使用 virtual定义 的类成员可称为 虚成员,子类采用override进行重写成为虚成员重写。
使用virtual定义类成员,以及使用override重写父类成员需要注意: - 父类的虚成员被重写时,需要使用相同的访问修饰。
- 在类的成员声明前加上 virtual关键字后,不能再有 abstract,static或者override 关键字。
- 如果子类使用new 隐藏父类的成员,就不能在该成员声明中使用 override关键字。
- New,static和virtual关键字不能与override 一同使用。
Object类中的方法:
C#语言永昌不要求类声明从object类中继承。因为继承是隐式的,由于c#中的所有类均从object派生,所以object类中定义的公有方法可用于系统中的所有对象,派生类可以重写某些方法,object包含如下公共方法: - public virtual bool equals(object ob):用于判断指定的对象是否等于调用方法的对象。
- Public virtual bool equals(object ob1,object ob2):用于判断当前两个对象实例ob1,ob2是否相同。
- Public virtual int Gethashcode();返回当前对象相关的哈希码。适合哈希算法和数据结构中使用。
- Public virtual string tostring(); 返回描述类的事例的可读文本字符串 。
- Public static bool referenceequals(obj ob1,object ob2):静态方法,判断对象ob1和ob2是否为用一个对象。
- Public type gettype():返回当前对象的数据类型。
c#继承与多态
最新推荐文章于 2023-07-06 16:21:10 发布