派生类的构造方法

 

如果没有显示的为类定义任何构造函数,编译器就会为类定义默认的构造函数,反过来,如果为类定义的任何构造函数,编译器都不会再定义默认的构造函数。

 

如果在一个层次的类中,没有为类定义任何构造函数,那么在实例化一个类时,编译器解决这些层次结构的构造问题顺序是这样的:

首先 编译器找到要实例化的类的构造函数,这个构造函数再找到其直接基类的构造函数,这个直接基类的构造函数再找到他的直接基类的构造函数。。。。。。。一直找到Object类为止,因为Object没有基类了,这样就执行Object的构造函数,执行完后返回,再执行其直接子类的构造函数,执行完再返回。。。。。。这样就像现今政府机构下达命令一样,一层层下发,直到实例化那个类为止。因为从头到尾调用的都是编译器生成的构造函数(称为默认构造函数),所以整个过程都是编译器在忙。

 

如果我在这个层次的类中手动为一个类添加了一个无参数的构造的话,(因为编译器不会去生成默认的构造函数了) ,编译器做的工作和上面一样,层层上报,再层层下发,只不过用我的构造函数替换了编译器的默认构造函数而已。

 

如果我在这个层次的类中手动为一个类添加了一个带参数的构造函数的话,(编译器同样不会去生成默认的构造函数,好像只要你侵犯他的构造领域,他就不去管了),这样编译时当然会报错。 因为其下层构造函数要在这里找一个无参数的构造函数发现找不到了。怎么办?

指定派生类在基类中查找的构造函数

 

     class  a
    {
         public   string  name;
         // public a()
         // {
         //     name = "调用了无参数的构造";
         //     Console.WriteLine(name);
         // }
         public  a( int  i)
        {
            name  =   " 调用了有参数的构造 " + " /t " + i;
            Console.WriteLine(name);
        }
    }

     class  b : a
    {
         public   decimal  salary;
         public  b():base(3)
        {
             salary = 5000;
        }
    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值