Why can an abstract class have constructor?
本问题已经有最佳答案,请猛点这里访问。
抽象类为什么有构造函数?有什么意义?很明显,我们不能创建抽象类的实例。
一个重要原因是,在派生构造函数执行之前存在对基构造函数的隐式调用。记住,与接口不同,抽象类确实包含实现。该实现可能需要字段初始化或其他实例成员。请注意以下示例和输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | abstract class Animal { public string DefaultMessage { get; set; } public Animal() { Console.WriteLine("Animal constructor called"); DefaultMessage ="Default Speak"; } public virtual void Speak() { Console.WriteLine(DefaultMessage); } } class Dog : Animal { public Dog(): base()//base() redundant. There's an implicit call to base here. { Console.WriteLine("Dog constructor called"); } public override void Speak() { Console.WriteLine("Custom Speak");//append new behavior base.Speak();//Re-use base behavior too } } |
虽然我们不能用
产量:
调用了动物构造函数
调用了dog构造函数
自定义语音
默认发言
您仍然可以初始化任何变量、依赖项,并且可以设置继承类的构造函数的签名。
当您需要对某些特定的情况使用不同的策略时,通常需要抽象类,因此能够在抽象类中执行其他所有操作是有意义的。而构造方法