我有一个基类和一个子类。基类包含一些变量,子包含一些变量。
我需要做的是,当我创建子类的对象时,我在其构造函数中传递基类对象,该构造函数将设置子对象的基类变量。
代码:
public class BaseClass
{
public int BaseInteger;
public double BaseDouble;
public bool BaseBool;
}
public class ChildClass : BaseClass
{
public ChildClass(BaseClass baseClass)
{
this.base = baseClass; // I am trying to do this.
}
public int ChildInteger;
public string ChildString;
}
所以我可以在这里尝试做什么。怎么样?当我尝试这段代码时,我收到了这个错误。
Use of keyword 'base' is not valid in this context
答案 0 :(得分:5)
您必须意识到ChildClass
不会包含 BaseClass
,而是继承。
这就是为什么您可以使用this
关键字(例如this.BaseInteger
)访问基类中定义的数据和方法。
这就是为什么你不能'设置'BaseClass
的{{1}},它不包含一个。{/ p>
然而,有一些有用的模式可以实现你想要做的事情,例如:
ChildClass
感谢@svick的建议。
答案 1 :(得分:1)
public class BaseClass
{
public int BaseInteger;
public double BaseDouble;
public bool BaseBool;
}
public class ChildClass : BaseClass
{
public ChildClass(BaseClass baseClass)
{
this.BaseInteger = baseClass.BaseInteger;
this.BaseDouble = baseClass.BaseDouble;
this.BaseBool = baseClass.BaseBool;
}
public int ChildInteger;
public string ChildString;
}
答案 2 :(得分:1)
我认为最优雅的方法是在BaseClass
类中创建第二个构造函数,该构造函数采用BaseClass
实例来初始化其字段。然后,您只需在ChildClass
类中调用此基础构造函数:
public class BaseClass
{
public int BaseInteger;
public double BaseDouble;
public bool BaseBool;
public BaseClass()
{
}
public BaseClass(BaseClass baseClass)
{
this.BaseInteger = baseClass.BaseInteger;
this.BaseDouble = baseClass.BaseDouble;
this.BaseBool = baseClass.BaseBool;
}
}
public class ChildClass : BaseClass
{
public int ChildInteger;
public string ChildString;
public ChildClass(BaseClass baseClass) : base(baseClass)
{
}
}