C#允许您通过扩展现有类的功能以创建新类来实现继承。
从基类创建派生类
使用以下语法在C#中创建派生类:
class <derived_class>:<base_class>
{
...
}
确定继承的层次结构
要确定继承层次结构,必须检查派生类与基类之间的关系种类。确保派生类是一种基类。
请考虑以下场景。您有Emoloyee、Manager和Designer类。您需要Employee类的属性在Manager和Designer类中存在。您可以使用任何以下代码段来确保此操作:
class Employee
{
public void Calc_Leave
{
...
}
}
class Manager
{
Employee e;
public void leave()
{
e.Calc_leave()
}
}
class Designer
{
Employee e;
public void leave()
{
e.Calc_Leave()
}
}
class Employee
{
public void Calc_Leave()
{
...
}
}
class Manager:Employee
{
public void leave()
{
Calc_Leave(); /*The function of the base class is available here */
}
}
class Designer :Employee
{
public void leave()
{
Calc_Leave(); /* The function of the base class is avaiable here */
}
}
从语法上来说 ,上述代码段没有任何错误。然而,这些代码段之一描述了利用关系,另一代码段描述了类之间的继承。
要选择更恰当的方法来创建 Manager和Designer类,您必须分析类之间的关系。由于经理和设计人员都是雇员,所以在经理和雇员以及设计人员和雇员之间有“某种”关系。因此,从Employee类继承Manager和Designer类比在Manager和Designer类中单独创建Employee类的实例以访问Employee类的属性更为恰当。因此,在此场景中第二个代码比第一个代码更恰当。
派生类中的构造函数 调用
创建派生类的对象时,将执行该派生类以及基类的构造函数。构造函数以基类到派生类的顺序调用。但是,析构函数的执行由垃圾回收器控制,它们的调用顺序无法确定。
以下代码显示了派生类中构造函数的调用顺序:
using System;
class Base
{
public Base()
{
Console.WriteLine("Constructor of Base");
}
~Base()
{
Console.WriteLine("Destructor of Base");
}
}
class Derived :Base
{
public Derived()
{
Console.WriteLine