我通过删除一些空的构造函数使我的构造函数更加严格一些。我很新的继承,并与我得到的错误困惑:基类不包含无参数构造函数。我怎样才能使A2从A继承,而A中没有空的构造函数。另外,为了我个人的理解,为什么A2需要A的空构造函数?基类不包含无参数构造函数?
Class A{
//No empty constructor for A
//Blah blah blah...
}
Class A2 : A{
//The error appears here
}
我通过删除一些空的构造函数使我的构造函数更加严格一些。我很新的继承,并与我得到的错误困惑:基类不包含无参数构造函数。我怎样才能使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
}
}
如果你的基类没有参数的构造函数,你需要使用base
关键字来调用一个从你的派生类:
class A
{
public A(Foo bar)
{
}
}
class A2 : A
{
public A2()
: base(new Foo())
{
}
}
例子:
class A2 : A
{
A2() : base(0)
{
}
}
class A
{
A(int something)
{
...
}
}
将基类放在第一位通常很容易阅读。 –
将基类放在不同的文件中更为常见。 – Joe
它有致电一些构造函数。默认是拨打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))
{
}
}
,因为如果没有默认的构造函数,然后A2的构造函数需要调用基()与参数A的构造函数看到这个问题:当您创建的对象Calling the base constructor in C#
您您的基类构造函数会自动调用。因此,当您创建派生类对象时,并且派生类对象没有带一个或多个参数的构造函数时,将不会传递给需要一个论据。 所以要做到这一点,你需要的东西传递给基类构造函数如下:
Class A{
//No empty constructor for A
//Blah blah blah...
}
Class A2 : A{
public A2():base(some parameter)
}
你不能没有构造函数创建一个类的对象。如果你不想无参数的话,可以创建一个接受一些参数的构造函数。 –
我应该在OP中更加清楚,A类和A2类都有带参数的构造函数,我只是想删除无参数的构造函数,以便创建一个类的实例,您需要该类的所有必要参数工作。这似乎是一件很直观的事情,这是一个明智的做事方式吗? – sooprise