为什么在构造函数之前调用类的成员方法

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)

Mar*_*rco 6

那是因为当你打电话给SavingsCustomerctor时,首先要调用它的基类ctor; 在Customer构造函数调用Print这是一个重写的方法.
因此,在SavingsCustomer执行ctor指令之前,Customer必须完全调用ctor.请注意,当你打电话PrintCustomer,SavingsCustomer.Print()执行.

这是预期的行为; 如果您希望类的行为不同,则必须更改其逻辑.也许你不应该从基础构造函数调用一个抽象方法,只是为了避免你现在看到的...