【发布时间】:2022-01-08 21:44:11
【问题描述】:
我无法理解对象操作在 C# 方法中的工作原理。我知道,当您将对象传递给方法时,会传递对该对象的引用。考虑到这一点,我认为选项 1 会像这样工作:
- root 变量作为对 root 的引用进入方法
- 当您将其设置为 root.left 时,它会将该引用更新到 root 的左侧
- 然后,当您将其设置为新节点时,root 现在将在其左侧字段中有一个成员。
但是,只有选项 2 有效。这是为什么呢?
如果可以,请忽略它是静态的,这只是我为了解其工作原理而制作的一个示例。我尝试在不使用任何成员变量的情况下使其不是静态的,它做了同样的事情。
class binaryTreeNode
{
public binaryTreeNode left;
public binaryTreeNode right;
public int data;
private binaryTreeNode(int data)
{
this.data = data;
}
public binaryTreeNode() {}
public static void insert(binaryTreeNode root, int data)
{
binaryTreeNode newNode = new binaryTreeNode(data);
//option 1
root = root.left;
root = newNode;
//option 2
root.left = newNode;
// in main():
// binaryTreeNode root = new binaryTreeNode();
// root.data = 5;
// binaryTreeNode.insert(root, 3);
// Console.WriteLine(root.left.data);
// null reference on option 1
// outputs properly (int data) on option 2
}
}
【问题讨论】:
-
在 C# 中,类和方法名应该是 Pascal-case,而不是 camel-case。
-
我在答案中添加了一个示例。您可以检查一下,如果它有意义,您应该对参考有信心。