0

我在嵌套数据类的 Node 代码的设置器中遇到堆栈溢出异常

嵌套数据类 Desc 应该如何在基类和派生类中处理,以便我可以在主窗口中创建的新节点中使用这些数据?

namespace Lib
{
    // Nested Data Class
    public class Desc
    {
        public Desc(string shape, Nullable<bool>[] inpins)
        {
            this.inpins = inpins;
        }
        string shape { get; set; }
        Nullable<bool>[] inpins { get; set; }
    }

    // Base class drived from ShapeNode class in vendor's framework
    public class Node : ShapeNode
    {
        public Node()
        {
        }

        // Make a copy of Node
        public Node(Node copy)
         : base(copy)
        {
          Text = copy.Text;
          NodeId = copy.NodeId;
        }

        public virtual Node Clone()
        {
           return new Node(this);
        }
       // Base Constructor
        public Node(string Text, Desc NodeId)
        {
           this.Text = Text;
           this.NodeId = NodeId;
        }
        new public string Text { get { return base.Text; } set { base.Text = value; } }
        public Desc NodeId { get { return NodeId; } set { NodeId = value; }
     }
}

   namespace Test
   {
   // Main Window code
public partial class MainWindow : Window
{
     public MainWindow()
     {
          InitializeComponent();
          nodes = new Node[]
          {   new A(
            "TESTA",
             new Desc(new Nullable<bool>[]{false, false})),
           new B(
             "TESTB",
              new Desc(new Nullable<bool>[] {false, false, false}))
          }
     }
 }
4

2 回答 2

2

属性 getter(和 setter)只是一个具有特殊签名和名称的方法。所以我们可以将 NodeId 的 getter 重写为:

public Desc get_NodeId()
{   
    // recursive call
    return get_NodeId();
}

要解决这个问题,只需更换

public Desc NodeId { get { return NodeId; } set { NodeId = value; }}

经过

public Desc NodeId { get; set; }

在这种情况下,我们有(当此方法未内联时):

public Desc get_NodeId()
{   
    // compiler-generated backing field
    return _nodeId; 
}
于 2013-05-04T19:52:30.853 回答
0

这是一个循环并导致堆栈溢出异常

NodeId { get { return NodeId; } 

使用 2kay (+1) 的答案或使用另一个名称的私有变量

private Desc nodeID;

public Desc NodeId { get { return nodeID; } set { nodeID= value; }
于 2013-05-04T20:01:00.177 回答