//C#中类的继承
允许我们根据一个类来定义另一个类,这样的话会这使得创建和维护应用程序变得更简单容易。有利于节省开发时间。当创建一个类时,我们不需要完全重新编写,只需要设计一个新的类,来继承了已有的类的即可。
这个已有的类被称为的基类,父类;这个新的类被称为派生类,子类。
C# 继承的特点:
- 是对基类的扩展,可以添加新的成员,但不能移除已经继承的成员 的定义。
- 继承是可以传递的。
- 构造函数和析构函数不能被继承,且基类中成员的访问方式只能决定派生类能否访问它
- 如果定义了与继承而来的成员同名的新成员,那么将覆盖已继承的成 员
- 类可以定义虚方法、虚属性及虚索引指示器,派生类能重载这些成员,使类可以展示出多态性
- 派生类只能从一个类中继承,可以通过接口来实现多重继承。
C#继承关系中构造方法之间的关系:
1.在实例化子类对象,会先调用父类的构造方法,然后在调用子类的构造方法
2.默认情况下,在子类的构造器中都会自动调用父类的无参构造器
3.如果需要调用父类中带参数的构造器要使用“:base(参数)”的形式
//Object类简介
Object 类是 C# 语言中最原始、最重要的类,每个 C# 类都是它的 子类,它实现了每个类都必须具有的基本方法。
Object 类中4 个常用的方法:Equals,GetHashCode,GetType , ToString
Equals方法:
法主要用于比较两个对象是否相等,相等返回 True,不相等返回 False
在 C# 语言中,Equals 方法提供了两个定义方法:
静态方法:Equals (object ol, object o2);
非静态方法:Equals (object o);
GetHashCode方法
返回当前 System.Object 的哈希代码,每个对象的哈希值都是固定的。该方法不含有任何参数,不是静态方法,需要使用实例来调用。对于不同实例的哈希值是不同的,因此可以通过该方法比较对象是否相等。
GetType方法
用于获取当前实例的类型,返回值为 System.Type 类型
ToString方法
返回一个对象实例的字符串,在默认情况下将返回类类型的限定名。对于值类型,则为将值转换为字符串类型的值。 任何类都可以重写 ToString 方法,返回自定义的字符串。
//继承中的关键字
base关键字
除了调用父类的构造方法以外还可以调用父类的属性和方法
base指代 当前对象中父类的部分内容。
如果在同名的方法中使用 base 关键字调用父类中的方法,相当于把父类中的方法内容复制到该方法中。
virtual关键字
能修饰 方法、属性、索引器以及事件等定义成虚拟的,用到父类的成员中这些成员将会在继承后重写其中的内容。
重写的概念:子类中重新定义与父类重名且结构相同方法
abstract关键字
该关键字能修饰类和方法,修饰的方法被称为抽象 方法、修饰的类被称为抽象类
在 C# 语言中抽象方法是一种不带方法体的方法,仅包含方法的声明。
sealed关键字
能修饰类或者类中的方法,修饰方法必须出现在子类中,并且是子类重写的父类方法,必须与 override一起使用
特点: 不能被继承 ,不能被重写
//多态
多态称为运行时多态,也就是在运行时同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果
多态性通过派生类覆写基类中的虚函数型方法或者抽象方法来实现。
多态性分为两种一种函数重载是在编译阶段完成的多态,一种类的多态是在运行时完成
编译时的多态性:
通过重载来实现的,对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。
运行时的多态性:
是指直到系统运行时,才根据实际情况决定实现何种操作。
构成多态的条件:
具有继承关系。
子类中重写父类的虚方法。
父类实例指向子类的对象。