继承,类似于老人家说的开枝散叶,从一个根起,不断的分叉生成很多枝叶。而继承就是这样子。
继承适用于某类继承自另外一个类,该类可以是普通类,也可以是抽象类。
如果是接口的话,我们术语不叫继承,叫实现。所以,继承是针对类而言的。
为何要继承?
我们常听说继承衣钵,一般是指收了徒弟,传授本领,有个人接班,发扬光大,做出比上辈更光彩的成绩。
嗯,C#中的继承也是这个道理。通过继承,可以创建新的类,以便重用、扩展、修改父类的行为。这不就是发扬光大吗。
继承还有开枝散叶的功能,一个父类,可以被很多个子类继承,实现不一样的行为,也就是师傅可以收很多徒弟,每个徒弟都可以发扬光大。而子类,又可以被孙子类继承,这样可以一直发散出去。
下面演示了“美食”的例子,代码里的中文是为了让读者方便,实际项目应写英文。
public class 美食
{
/// <summary>
/// 制作美食
/// </summary>
public virtual void Make() { }
}
public class 中餐 : 美食
{
/// <summary>
/// 制作美食
/// </summary>
public override void Make() { }
}
public class 西餐 : 美食
{
/// <summary>
/// 制作美食
/// </summary>
public override void Make() { }
}
而中餐,又可能会有八大菜系:
public class 闽菜 : 中餐
{
/// <summary>
/// 制作美食
/// </summary>
public override void Make() { }
}
public class 川菜 : 中餐
{
/// <summary>
/// 制作美食
/// </summary>
public override void Make() { }
}
public class 粤菜 : 中餐
{
/// <summary>
/// 制作美食
/// </summary>
public override void Make() { }
}
关于继承的一些要点:
1.继承的父类,只有一个,即它是单继承的。
2.如果您要防止父类被直接实例化(即可以被new一个对象),那么你可以声明为abstract抽象类。
3.接口可以给类定义特定的功能,类可以实现多个接口。
4.如果您要防止类被继承,则可以加入关键字sealed,密封。密封的作用是声明无法被继承,即不能被扩展。
实际项目中关于继承的设计思考
1.写代码前,您应有前期需求调研准备。
2.您应有简单建模,了解全局结构。
3.针对您对需求的深刻了解,应该要知道哪些是未来要扩展的,这是您可能需要用到继承的地方。
祝您用餐愉快。