基类不包含无参数构造函数
本文关键字:构造函数 参数 包含无 基类 | 更新日期: 2023-09-27 18:10:37
我通过删除一些空构造函数来使构造函数更严格一些。我对继承非常陌生,并且对我得到的错误感到困惑:基类不包含无参数构造函数。我如何使A2从A继承而不存在一个空的构造函数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的构造函数需要使用A的构造函数的参数调用base()。参见这个问题:在c#中调用基构造函数
当您创建派生类的对象时,将自动调用基类构造函数。所以当你创建你的派生类对象时,你的派生类对象没有构造函数接受一个或多个参数,没有什么可以传递给想要一个参数的基类构造函数。因此,要做到这一点,需要向基类构造函数传递一些东西,如下所示:
Class A{
//No empty constructor for A
//Blah blah blah...
}
Class A2 : A{
public A2():base(some parameter)
}