【发布时间】:2015-12-25 20:18:07
【问题描述】:
我知道类总是通过引用传递不同于通过值传递的结构。
如果你看一下下面的代码,你会发现我调用了一个没有ref 关键字的函数(假设不需要它,因为Path 是一个类,因此它应该总是由 ref 自动调用不需要ref 关键字)。
public MainWindow()
{
InitializeComponent();
Func(myPath);
if (myPath == null)
MessageBox.Show("AAAARGH");
}
Path myPath;
private void Func(Path p)
{
if (p == null)
p = new Path();
}
所以在函数调用之后,我希望myPath 不再是null,因为它已在Func() 中初始化,但事实并非如此。
我正在研究全球价值。这会改变什么吗?
【问题讨论】:
-
通过引用传递,如果没有 ref 关键字,您仍然无法更改该引用指向的位置。您可以修改该对象的属性,但不能创建新对象并将其保留回调用者。
-
这真是糟糕的设计。为什么不直接使用
myPath?此外,无论您在做什么,它都不属于后面的代码。创建合适的 ViewModel。 -
我正在制作多路径画布。相同的功能既可以在新路径上操作,也可以在用户通过鼠标选择的路径上操作。这就是为什么我有一个代表 mouseSelectedPath 的 myPath。那就是说你是对的,我将重新阐述我的代码,尽量不使用全局路径。还有一件事:为什么不使用代码隐藏?这是一个相当复杂的程序,所以我无法将所有内容都放在 xaml 文件中。
-
错了。如果参数没有
ref或out,则一切(无论类型如何)都是按值传递。如果参数具有ref或out,则所有内容(无论类型如何)都是通过引用传递的。
标签: c# function pass-by-reference pass-by-value