构造函数

作者:郑凯丰
开发工具:VS
编写日期:2019年8月15日

实例构造函数的调用顺序刚好相反,所以创建子类实例时,其所有构造函数和变量的调用顺序为:
子类静态变量初始化>子类静态构造函数>父类静态变量初始化 > 父类静态构造函数 > 父类实例变量初始化>父类实例构造函数 > 子类实例变量初始化>本身实例构造函数

解答:构造函数是先执行静态(只执行一次);如果继承了会先执行子类;
构造函数(Parent)在(Child)new出来的那一刻起就已经开始执行了,然后他有子类继承所以:先执行子类(Child)里的静态方法(static Child()),再执行父类里的静态方法(static Parent()),然后再执行(Parent()),之后再执行(Child()),下一步因为Main里面实例化了子类(Child)调用了子类里面的(Add),Add里面的(base)可以直接指向继承的父类成员的公共类和受保护成员方法,之后再执行子类里面的(Add),下一步就执行子类里面的(GO)方法里面的(base.Go())直接调用了父类的(Go)方法,之后再执行子类的(GO)方法;
答案:

public class Parent
    {
        static Parent()
        {

            Console.WriteLine("Parent Static Constructor a");//A

        }
        public Parent()
        {

            Console.WriteLine("Parent Constructor b");//B

        }
        public virtual void Add()//虚方法
		{              
			  Console.WriteLine("Parent virtual Add c");//C
        }
        public virtual void Go(){

        }
    }
    public class Child : Parent
    {
        static Child()
		{  

            Console.WriteLine("Child Static Constructor d");//D

        }
        public Child()
		{

            Console.WriteLine("Child Constructor e");//E

        }
        public override void Add()
		{
            base.Add();
            Console.WriteLine("Child override Add  f");//F
        }
        public override void Go(){
            base.Go();
            Console.WriteLine("Child override Go j");//J
        }
    }
    class Program
{

        static void Main(string[] args)
        {

            Child child = new Child();
            child.Add();
            child.Go();
        }
    }

答案结果为:D、A、B、C、F、J

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值