【发布时间】:2012-12-06 17:41:18
【问题描述】:
public class TreeNode
{
public TreeNode Left;
public TreeNode Right;
public int Data { get; set; }
public TreeNode(int data)
{
Left = null;
Right = null;
Data = data;
}
}
public class BinarySearchTree
{
private TreeNode _root;
public BinarySearchTree()
{
_root = null;
}
public void Insert(int data)
{
TreeNode tempNode = null;
Insert(_root, tempNode);
}
private void Insert(TreeNode treeNode, TreeNode newNode)
{
newNode = new TreeNode(3);
treeNode = new TreeNode(4);
}
在这个例子中,public void Insert(int data) 方法基本上只是调用私有方法,我在public void Insert(int data) 方法的末尾设置了一个断点。
注意到_root 仍然为空,而tempNode 为4。我不明白为什么?谁能解释一下?
【问题讨论】:
-
代码可以编译吗?在 Insert(int) 中 newNode 定义在哪里?
-
您正在按值传递引用。如果您执行了 treeNode.DoWork(),它将作用于被引用的对象,但如果您重新分配 treeNode,则您正在重新分配引用本身(通过值传递)。
-
框架设计指南(Krzysztof Cwalina 和 Brad Abrams 合着的一本书)建议避免使用 ref 和 out 参数。很少有充分的理由使用
out和ref。 -
我的问题是为什么 _root 仍然为空,而 tempNode 为 4。
-
请考虑以使预期行为与名称相关的方式命名方法。现在“插入”更像是“CreateSomeNodes”...
标签: c# pass-by-reference