C#:如何从现有基础 class 对象构造派生 class?

C#: How to construct a derived class from an existing base class object?

请考虑一下:

class MyTreeNode: TreeNode{
   int x;
   public MyTreeNode(TreeNode tn)
   {
      x=1; 
      // Now what to do here with 'tn'???
   }

我知道如何使用x。但是我应该如何在这里使用 tn 将其分配给我的 MyTreeNode 对象?

为什么要将 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; 
}

但是,如果您的 base-class 上也有私有成员,则必须复制这些成员,这要困难得多,在这种情况下,您必须使用反射才能访问这些私有成员(例如字段)。

正如其他评论所述,您需要一个复制构造函数。 我会使用下面的代码,这样我也可以在没有反射的情况下复制私有属性。

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; 
   }