C#基类与派生类的问题

 一直对继承问题有些不清楚,因为要项目开发中用得也不多,所以也就没有深究。最近重新看继承的问题,对派生类中继承甚基类的构造函数问题总有些凝问。在派生类如何隐藏基类中的构造函数。在派生类可以隐藏基类的方法,但好像找不到隐藏基类中构造函数的方法。如果派生类和基类中都有一个无参的构造函数,在对派生类实例化时把基类和派生类的构造函数都执行了。如:

 class mybasec
        {       public mybasec(int i)
            {
                Console.WriteLine("这是基类中的有参函数变量名是i,值为{0}", i);
            }
     }
        class myDerivec:mybasec
        {
           public myDerivec(int i)
                
            {
                Console.WriteLine("这是派生类中的有参函数变量名是i,值为{0}", i);
            }
         }

问题1:程序编译错误,问题是基类中不包含0参数的构造函数,为什么不行。

问题2:在myDerivec myd2 = new myDerivec(6);时不想执行基类中的构造函数,有没有办法把基类中的构造函数隐藏?


慕容3067478
浏览 451回答 2
2回答

潇潇雨雨

第一个问题:这个代码肯定报错,你的基类构造函数要求一个参数。你继承以后,它照样要求一个参数。而你在子类的构造函数中,并没有这么做,那么它肯定要报错,原因是你没有为基类的构造函数传递参数。public mybasec(int i)            {                Console.WriteLine("这是基类中的有参函数变量名是i,值为{0}", i);            }第二个问题: 没有办法隐藏,但是你可以重载,在基类中增加如下代码public mybasec()            {                Console.WriteLine("这是基类中的有参函数变量名是i,值为{0}", i);            }现在就不会在出现问题了。

青春有我

基类的构造函数不执行,意味着没有创建基类的实例,那么派生类怎么去访问基类的实例属性?所以CLR的设定,还是需要在实例化派生类的时候,先实例化基类的。
打开App,查看更多内容
随时随地看视频慕课网APP