首页 新闻 搜索 专区 学院

C#基类与派生类的问题

0
[已关闭问题]

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

 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);时不想执行基类中的构造函数,有没有办法把基类中的构造函数隐藏?

fyy的主页 fyy | 初学一级 | 园豆:200
提问于:2009-09-10 11:13
< >
分享
其他回答(2)
0

第一个问题:这个代码肯定报错,你的基类构造函数要求一个参数。你继承以后,它照样要求一个参数。而你在子类的构造函数中,并没有这么做,那么它肯定要报错,原因是你没有为基类的构造函数传递参数。

public mybasec(int i)
            {
                Console.WriteLine("这是基类中的有参函数变量名是i,值为{0}", i);
            }
第二个问题: 没有办法隐藏,但是你可以重载,在基类中增加如下代码

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

现在就不会在出现问题了。

邢少 | 园豆:10926 (专家六级) | 2009-09-10 11:26
谢谢,对于第二个问题的问题,基类中有一个一个参数的构造函数,派生类中也有一个。在派生类实例化时,会把二个构造函数都执行一次。如果我不想执行基类中的构造函数,只执行派生类自己的构造函数,有没有办法?
支持(0) 反对(0) fyy | 园豆:200 (初学一级) | 2009-09-10 11:48
@fyy: 不可以..首先、构造函数是在类初始化的时候第一个调用的。如果你不想执行,前提是没有定义。如果定义了你就必须用。或者你就不写那个传参数的构造函数。或者再加一个没参数的重载.
支持(0) 反对(0) 邢少 | 园豆:10926 (专家六级) | 2009-09-11 14:03
0

基类的构造函数不执行,意味着没有创建基类的实例,那么派生类怎么去访问基类的实例属性?所以CLR的设定,还是需要在实例化派生类的时候,先实例化基类的。

Cheese | 园豆:509 (小虾三级) | 2009-09-10 15:29
0

第一个问题,子类实例化时一定会调用基类的构造函数,因为基类也一样要被实例化,默认是调用无参的构造函数,而你这里没有,所有这里会报错。当然你也可以手工指定调用哪个基类的构造函数,如:

public myDerivec(int i):base(i),这样指明后上面的程序就不会报错了。

第二个问题,如楼上所说,做不到。

atao.xiang | 园豆:211 (菜鸟二级) | 2009-09-12 21:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册