我有一个应该在构造函数中实例化的私有类型。我有基础构造函数和另一个带参数。我在基础中保持实例化,只在参数化构造函数中进行变量赋值。但它没有用。
这不起作用。
public class MainClass
{
private MyType myType = null;
private string myParm = string.Empty;
private MainClass()
{
myType = new MyType();
}
public MainClass(string inParm) : base()
{
myParm = inParm;
}
}
以下是有效的,
public class MainClass
{
private MyType myType = null;
private string myParm = string.Empty;
private MainClass()
{
}
public MainClass(string inParm): base()
{
myType = new MyType();
myParm = inParm;
}
}
保存在基础构造函数中时,myType未初始化
答案 0 :(得分:7)
您希望this()
不是base()
。您想要在同一个类上调用构造函数,而不是它的基类:
public MainClass(string inParm) : this()
{
myParm = inParm;
}
默认情况下,类会调用其基类的默认构造函数,因为它是构造自身的必要条件。如果基类上没有默认构造函数,则必须提供正确的参数以满足基类的构造。
但你的基类是Object
,所以不必担心它。
答案 1 :(得分:3)
您必须致电this()
而不是base()
,因为您没有调用父构造函数:
public class MainClass
{
private MyType myType = null;
private string myParm = string.Empty;
private MainClass()
{
myType = new MyType();
}
public MainClass(string inParm)
: this()
{
myParm = inParm;
}
}