2013-05-04 48 views
0

我得到堆栈溢出exceptin在从嵌套数据类嵌套类底座内和派生类

应该如何嵌套数据类说明在基来处理此代码为节点的设定器和衍生类,以便我可以在主窗口中创建的新节点中使用这些数据?

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

回答

2

属性getter(和setter)只是一个具有特殊签名和名称的方法。因此,我们可以改写的NodeId的吸气剂:

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

为了解决这个问题,只是

public Desc NodeId { get; set; } 

更换

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

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

public Desc get_NodeId() 
{ 
    // compiler-generated backing field 
    return _nodeId; 
} 
0

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

NodeId { get { return NodeId; } 

使用来自2kay(+1)的答案或使用私有变量与另一名

private Desc nodeID; 

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