请考虑一下:
class MyTreeNode: TreeNode{
int x;
public MyTreeNode(TreeNode tn)
{
x=1;
// Now what to do here with 'tn'???
}
我知道如何使用x
。但是,我应该如何使用tn
将其分配给我的MyTreeNode
对象?
答案 0 :(得分:2)
为什么要将tn
分配给MyTreeNode
?它已经从中继承了。如果您打算创建tn
但类型为MyTreeNode
的副本,则应创建一个复制构造函数:
int x;
public MyTreeNode(TreeNode tn)
{
// copy tn´s attributes first
this.myProp = tn.myProp;
// ... all the other properties from tn
// now set the value for x
this.x = 1;
}
但是,如果您的基类上也有私人成员必须复制,那么这将更加困难,在这种情况下,您必须使用反射来访问这些私有成员(例如字段)。
答案 1 :(得分:2)
正如其他评论所述,您需要一个复制构造函数。 我会使用以下代码,这样我也可以复制私有属性而不用反射。
class TreeNode
{
private int myProp; //value type field
private TreeNode parentNode; //reference type field
public TreeNode(TreeNode tn) //copy constructor
{
//copy all the properties/fields that are value types
this.myProp = tn.myProp;
//if you have reference types fields properties you need to create a copy of that instance to it as well
this.parentNode = new TreeNode(parentNode);
}
//You can have other constructors here
}
class MyTreeNode: TreeNode{
int x;
public MyTreeNode(TreeNode tn):base(tn) //This calls the copy constructor before assigning x = 1
{
x=1;
}