Pra*_*tik 5 c# oop inheritance abstract-class
通常,构造函数是在实例化时在类中执行的第一件事.
但是在下面的例子中,首先执行类的成员方法然后执行构造函数.
为什么会这样?
代码场景:
namespace AbsPractice
{
class Program
{
static void Main(string[] args)
{
SavingsCustomer sc = new SavingsCustomer();
CorporateCustomer cc = new CorporateCustomer();
}
}
public abstract class Customer
{
protected Customer()
{
Console.WriteLine("Constructor of Abstract Customer");
Print();
}
protected abstract void Print();
}
public class SavingsCustomer : Customer
{
public SavingsCustomer()
{
Console.WriteLine("Constructor of SavingsCustomer");
}
protected override void Print()
{
Console.WriteLine("Print() Method of SavingsCustomer");
}
}
public class CorporateCustomer : Customer
{
public CorporateCustomer()
{
Console.WriteLine("Constructor of CorporateCustomer");
}
protected override void Print()
{
Console.WriteLine("Print() Method of CorporateCustomer");
}
}
}
Run Code Online (Sandbox Code Playgroud)
那是因为当你打电话给SavingsCustomerctor时,首先要调用它的基类ctor; 在Customer构造函数调用Print这是一个重写的方法.
因此,在SavingsCustomer执行ctor指令之前,Customer必须完全调用ctor.请注意,当你打电话Print时Customer,SavingsCustomer.Print()执行.
这是预期的行为; 如果您希望类的行为不同,则必须更改其逻辑.也许你不应该从基础构造函数调用一个抽象方法,只是为了避免你现在看到的...