C#关于继承 派生类构造函数的问题

事出有因:今天看项目代码碰到了C# 关键字 where ,我起先想到的是跟数据库的sql语句一样的where。我搜了资料后发现该关键字和泛型约束有关,于是我又继续学习关于泛型约束的知识,然后看到关于泛型类继承的问题。
于是自己就code了一些代码:

   class Human
    {
        //public Human()
        //{
            //Console.WriteLine("this is from HHHHHhuman constructor!");
        //}
        public Human(int i,int j)
        {
            Console.WriteLine("HHHHHHHan constructor222222");
        }
    }
    class Man : Human
    {
        public Man()
        {
            Console.WriteLine("this is from MMMMMMMMan constructor!");
        }
    }

这样的代码是会报错的:Base class ‘DelegateTest.Human’ doesn’t contain parameterless constructor
报错:Human类没有无参构造函数
这让我想到,为什么声明和实例的是Man,反而基类会报错,我又搜了一下发现,原来在派生类被初始化时,如果没有指定运行基类哪一个构造函数,则会默认运行的是基类的无参构造函数。大概就是实例化派生类的时候会先运行基类的构造函数再运行到自己的构造函数。
注意:基类如果没有写无参构造函数,反而写了有参的构造函数,此时如果派生类写无参构造函数则会报错。
下面是派生到孙子类的test code

    class Human
    {
        public Human()
        {
            Console.WriteLine("this is from HHHHHhuman constructor!");
        }
        public Human(int i,int j)
        {
            Console.WriteLine("HHHHHHHan constructor222222");
        }
    }

    class Man : Human
    {
        public Man(int i,int j):base(i, j)
        {
            Console.WriteLine("this is from MMMMMMMMan constructor!");
        }
    }

    class boy : Man
    {
        public static int i;
        public static int j;
        public boy() : base(i, j)
        {
            Console.WriteLine("this is from CCCCCChild constructor!");
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值