基类不包含无参数构造函数?
我通过删除一些空的构造函数来使构造函数更加严格。 我很新的inheritance,并与我得到的错误困惑:基类不包含无参数的构造函数。 我怎样才能使A2从Ainheritance,而没有在A中有一个空的构造函数。另外,为了我个人的理解,为什么A2需要A的空构造函数?
Class A{ //No empty constructor for A //Blah blah blah... } Class A2 : A{ //The error appears here }
在A2类中,您需要确保所有构造函数都使用参数调用基类构造函数。
否则,编译器将假定您想使用无参数基类构造函数来构造A2对象所基于的A对象。
例:
class A { public A(int x, int y) { // do something } } class A2 : A { public A2() : base(1, 5) { // do something } public A2(int x, int y) : base(x, y) { // do something } // This would not compile: public A2(int x, int y) { // the compiler will look for a constructor A(), which doesn't exist } }
例:
class A2 : A { A2() : base(0) { } } class A { A(int something) { ... } }
如果您的基类没有无参数构造函数,则需要使用base
关键字从派生类中调用一个:
class A { public A(Foo bar) { } } class A2 : A { public A2() : base(new Foo()) { } }
它必须调用一些构造函数。 默认是对base()
的调用。
您也可以在调用base()
的当前构造函数中使用静态方法,文字和任何参数。
public static class MyStaticClass { public static int DoIntWork(string i) { //for example only return 0; } } public class A { public A(int i) { } } public class B : A { public B(string x) : base(MyStaticClass.DoIntWork(x)) { } }
因为如果A没有默认的构造函数,那么A2的构造函数需要用参数调用base()给A的构造函数。看到这个问题: 调用C#
当你创build派生类的对象时,你的基类构造函数会被自动调用。所以在你创build派生类对象的时候,你的派生类对象没有带一个或多个参数的构造函数的时候,需要一个参数的基类构造函数。 所以要做到这一点,你需要传递一些东西到基类的构造函数如下:
Class A{ //No empty constructor for A //Blah blah blah... } Class A2 : A{ public A2():base(some parameter) }