问题描述
①如果定义了一个有参数的构造函数,无参数的默认构造函数会失效,要想继续使用无参数的构造函数,必须使用重载重新定义一个无参数的构造函数?②即使在类中自定义了一个无参数的构造函数,原先的那个系统默认的无参构造函数也会失效?综合成一句话:类中,只要有自定义的构造函数,无论是有参数的自定义构造函数还是无参数的自定义构造函数,默认的那个无参构造函数就一定失效了?
解决方案
解决方案二:
应该是这么说如果一个类,你没有定义构造函数,那么系统默认会有一个无参的构造函数但如果你定义了一个有参的构造函数,为了保证正确性,系统不会创建无参构造函数,这时候,如果你还想允许无参构造,就必须显式的声明一个
解决方案三:
就是身在福中不知福,当你忘记写构造函数的时候,编译器帮你生成了一个,仅此而已
解决方案四:
不是,这给你怎么样实例化类有关。自定的构造函数可以理解成方法的重写,也就是参数名称相同,参数类型,数量不同而已。Aa=newA();与inti=10;Aa=newA(i);这肯定是不一样的。
解决方案五:
对的,只要你声明了构造函数,就不会再给你生成默认的构造函数了,并不是无效,而是没有。
解决方案六:
是的,是这样的,默认构造函数在你定义了自己的构造函数以后就没有了
解决方案七:
引用1楼starfd的回复:
应该是这么说如果一个类,你没有定义构造函数,那么系统默认会有一个无参的构造函数但如果你定义了一个有参的构造函数,为了保证正确性,系统不会创建无参构造函数,这时候,如果你还想允许无参构造,就必须显式的声明一个
说的对。其实如果你想在用有参构造函数的同时又能够用无参的构造函数,你可以显示的声明一个无参的构造函数和一个有参的构造函数。(理论上可以声明不同参数或者参数类型不同的构造函数)eg:classA{publicA(){}//无参构造函数publicA(inta){}//带一个参数的构造函数publicA(inta,doubleb){}//带两个参数的构造函数}然后你可以这样去使用classB{AtempA=newA();AtempA1=newA(1);AtempA2=newA(1,2.0);}这样就可以得到类A的三个不同参数的对象了!
解决方案八:
(理论上可以声明N多个不同参数或者参数类型不同的构造函数)
解决方案:
C#的实例化类的语法是使用new运算符,为防止错误,如果没写构造函数,编译器会自动创建一个如果写了构造函数,默认的就不再自动创建
解决方案:
是的,只要你定义了一个或多个构造函数(不管是有参的的还是无参的),默认的就没了
解决方案:
构造函数也是可以重载的。。。。你实例化的时候用什么参数,就用构造器就调用哪个构造函数。