C# 引用奇怪的行为
C# ref weird behaviour
我最近对 C# 引用有一种奇怪的体验。
请看一下这段代码:
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
变量的引用,这应该导致它们相同。
我们来看构造函数:
public RefClass(ref int x)
{
X = x;
}
特别是这一行:
X = x;
此时,小写x
变量是一个ref
变量。但是,当你把它复制到大写的X
属性时,你仍然在复制它当时的值到属性。 X
属性 仍然只是一个常规整数,据我所知,无法以您想要的方式声明引用 属性。
我最近对 C# 引用有一种奇怪的体验。
请看一下这段代码:
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
变量的引用,这应该导致它们相同。
我们来看构造函数:
public RefClass(ref int x)
{
X = x;
}
特别是这一行:
X = x;
此时,小写x
变量是一个ref
变量。但是,当你把它复制到大写的X
属性时,你仍然在复制它当时的值到属性。 X
属性 仍然只是一个常规整数,据我所知,无法以您想要的方式声明引用 属性。