阅读《C#高级编程》 随记
在博客园也潜水了几年了,看了很多,记的却很少。在几年程序员的工作经验下来之后,开始发现,自己做的项目确实很多,但是正的自己沉淀下来属于一点自己的东西却几乎没有。正好利用公司这段空闲的时间,买来几本书看看,正所谓温故而知新,也好好的梳理一下以前不太关注的一些基础知识,也希望能给一些新手提供一些帮助
今天需要记录的关于继承中抽象类相关的基础知识
-
抽象类和抽象函数
抽象类的定义就是关键字 abstract 抽象类不能实例化,抽象函数也不实例化,必须在非抽象的派生类中重写。抽象函数本身就是虚拟的,是不需要用virtual修饰的,如果用了会产生一个错误。如果类包含抽象方法,该类必须声明是抽象的。 -
密封类和密封方法
把类和方法声明为sealed,表示为密封的。密封的类不能继承,密封的方法不能重写。
一般声明sealed最有可能的的情形:如果要对库、类或自己编写的其他类作用于域外的类或方法进行操作,则重写某些功能会导致代码混乱。也可以因商业原油吧类或者方法标记为sealed,以防第三方以违授权协议的方式扩展。 -
派生类和构造函数
构造函数的执行是按照层次结构由上至下进行,直到达到编译器要实例化的类为止。在这个过程中,每个构造函数都初始化他自己类中的字段。所以我们在添加自己的构造函数的时候,也尽量遵循这样的原则。
构造函数的执行顺序。总是最先调用基类中的构造函数。也就是说,如果派生类的构造函数可以在执行过程中调用他可以访问的任何基类方法,属性和任何其他成员,因为基类已经构造出来了,其他字段也初始化了。public abstract class MyBaseAbsClass
{
private string name;
public MyBaseAbsClass() { }
public MyBaseAbsClass(string name)
{
Console.WriteLine(1);
this.name = name;
}
}public class SubClass1 : MyBaseAbsClass
{
private string referrerName;
SubClass1() { }
public SubClass1(string name)
: base(name)
{
Console.WriteLine(3);
}
public SubClass1(string name, string referrerName)
: base(name)
{
Console.WriteLine(2);
this.referrerName = referrerName;
}
}