mpe*_*pen 22 c# constructor class
这不会编译:
namespace Constructor0Args
{
class Base
{
public Base(int x)
{
}
}
class Derived : Base
{
}
class Program
{
static void Main(string[] args)
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
相反,我收到以下错误:
'Constructor0Args.Base'不包含带0参数的构造函数
这是为什么?基类是否需要一个带0参数的构造函数?
Mar*_*ell 29
它不是 - 问题是它需要调用一些基础构造函数,以初始化基类型,默认是调用base().您可以通过在derived-types构造函数中自己指定特定的构造函数(和参数)来调整它:
class Derived : Base
{
public Derived() : base(123) {}
}
Run Code Online (Sandbox Code Playgroud)
对于base(或替代this)构造函数的参数,您可以使用:
例如,以下内容也是有效的,使用上面的所有三个项目符号:
class Derived : Base
{
public Derived(string s) : base(int.Parse(s, NumberStyles.Any)) {}
}
Run Code Online (Sandbox Code Playgroud)
Bra*_*don 13
从另一个派生类时,将在派生类构造函数之前调用基类.当您没有显式调用构造函数时,您实际上是在编写
class Derived : Base
{
public Derived() : base()
{
}
}
Run Code Online (Sandbox Code Playgroud)
由于Base类没有0参数构造函数,因此无效.
如果没有为类显式定义构造函数,则会自动定义默认构造函数,如下所示:
public Derived() : base()
{
}
Run Code Online (Sandbox Code Playgroud)
您需要在基类上指定构造函数以及传递给它的参数:
public Derived() : base(1)
{
}
Run Code Online (Sandbox Code Playgroud)