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 不应该是对原始变量的引用吗?这意味着 XRefObject 的 属性)应该只是对静态 X 变量的引用,这应该导致它们相同。

我们来看构造函数:

public RefClass(ref int x)
{
    X = x;
}

特别是这一行:

X = x;

此时,小写x变量一个ref变量。但是,当你把它复制到大写的X属性时,你仍然在复制它当时的到属性。 X 属性 仍然只是一个常规整数,据我所知,无法以您想要的方式声明引用 属性。