none
在C#中,要自己手动在派生类的构造函数中逐一的初始化基类的字段吗? RRS feed

  • 问题

  • 在看C#编程指南,看到类和结构->继承的章节,提到派生类不能继承基类的构造函数和析构函数。我有几个问题:

    1. 是全部的构造函数都不能继承吗?包括默认构造函数、复制构造函数、复制操作符,以及其它各种带参数的构造函数?

    2. 如果不能继承构造函数,那么在子类的构造函数里,是否要将基类里的字段逐一初始化?如果真的是这样,那么岂不是很麻烦。我需要知道基类里的全部字段,然后再初始化一遍。可能在派生类的构造函数里,显示的调用一下基类的构造函数进行初始化基类部分的字段吗?这样就比较方便了。什么语法呢?base. 之类的吗?

    多谢!


    虚心的学习者

    2014年2月10日 8:22

答案

  • Hi,

    1,对

    2,可以再子类的构造函数里面调用基类的构造函数,如下所示:

        class A
        {
            public A(int i, int j)
            {
    
            }
        }
    
        class B : A
        {
            public B()
                : base(0, 1)
            {
    
            }
        }

    • 已标记为答案 snowffer 2014年2月11日 2:47
    2014年2月10日 8:42

全部回复

  • Hi,

    1,对

    2,可以再子类的构造函数里面调用基类的构造函数,如下所示:

        class A
        {
            public A(int i, int j)
            {
    
            }
        }
    
        class B : A
        {
            public B()
                : base(0, 1)
            {
    
            }
        }

    • 已标记为答案 snowffer 2014年2月11日 2:47
    2014年2月10日 8:42
  • Hi,

    1,对

    2,可以再子类的构造函数里面调用基类的构造函数,如下所示:

        class A
        {
            public A(int i, int j)
            {
    
            }
        }
    
        class B : A
        {
            public B()
                : base(0, 1)
            {
    
            }
        }

    对于base(0,1)部分,言外之意就是我仍然要知道基类里需要初始化的成员,然后显示的调用相应的方法进行初始化?

    虚心的学习者

    2014年2月10日 8:56
  • 如果不显式调用带参数的基类的构造函数,则会默认调用没有参数的基类的构造函数。如果基类在没有参数的构造函数里面初始化了所有成员,则子类不需要知道基类里面有哪些需要初始化的成员也能完成基类成员的初始化。

    子类的构造函数运行之前,肯定会先调用基类的构造函数(不管是带参数的还是没有参数的构造函数),而不是说子类的构造函数继承了基类的构造函数以后才能调用基类的构造函数。

    2014年2月10日 9:07
  • hello,

    没错,您仍需要得知父类建构函数,

    若父类有定意建构函数参数,子类就必须要遵守


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/

    2014年2月11日 2:09
  • hello,

    没错,您仍需要得知父类建构函数,

    若父类有定意建构函数参数,子类就必须要遵守


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/

    多谢回复!

    虚心的学习者

    2014年2月11日 2:48