【发布时间】:2022-01-13 18:24:28
【问题描述】:
我最近对 C# refs 有一个奇怪的体验。
请看一下这段代码:
class Program
{
public static bool testBool = true;
public static RefClass RefObject;
public static int X = 0;
static void Main(string[] args)
{
while (true)
{
if (testBool)
{
RefObject = new RefClass(ref X);
testBool = false;
}
X++;
Thread.Sleep(200);
Debug.WriteLine(X);
Debug.WriteLine(RefObject.X);
}
}
public class RefClass
{
public int X { get; set; }
public RefClass(ref int x)
{
X = x;
}
}
}
我仍然不明白为什么RefObject 的属性X 没有使用变量X 更新。 ref 不应该是对原始变量的引用吗?这意味着X(RefObject 的属性)应该只是对静态X 变量的引用,这应该会导致它们相同。
【问题讨论】:
-
这个想法是,如果您在
RefClass的构造函数中为x分配了一个新值,您可以观察到它,但您没有观察到。不涉及事后的新分配,并且 RefClass.X 不会永远与您的初始参数相关联。
标签: c# object reference parameter-passing ref