常量变量与引用变量和只读变量

Constant Variables Vs Reference Variables and Readonly variables

我有一个 class 具有三种类型的变量 - 常量、只读、像这样的引用变量

public class Constants
{
    public const int constA = 10;
    public int readOnlyB = 10;
    public readonly int referenceVarC = 10;
}

还有另一个项目像这样从上面引用这些变量 -

class Program
{
    static void Main(string[] args)
    {
        int a = Constants.Constants.constA;
        int b = new Constants.Constants().readOnlyB;
        int c = new Constants.Constants().referenceVarC;
        Console.WriteLine("The value of a is {0}", a);
        Console.WriteLine("The value of b is {0}", b);
        Console.WriteLine("The value of c is {0}", c);
        Console.ReadLine();
    }
}

根据常量类型变量的性质 - 当我更改 Constant 的值并重新编译项目但不重新编译正在使用常量的项目时,它指的是常量变量的旧值。仅在重新编译消耗项目时,常量项目的新值。这是可以理解的。

但为什么只读变量和引用变量也会观察到这种性质。那里的价值,如果在他们的创建项目中发生变化并且项目被编译,应该在消费项目中改变,消费项目没有重新编译,应该改变但我观察到它们指向旧值。

按照我的说法,当消费项目 运行 没有重新编译时,引用的程序集被加载(重新编译)并且应该加载新值。

如果不检查,我会假设您需要重新编译使用项目,因为这是 复制 引用的 DLL 的过程。换句话说,如果您不重新编译,您仍然在使用输出 bin 文件夹中的旧 DLL。

如果您手动将 DLL 从您的源输出 "bin" 复制到您的消费者输出 "bin" 那么您可以 运行 应用程序而无需重新编译,它会使用新的值。

这里的关键点是应用程序并不真正了解其他应用程序。因此,尽管您在 Visual Studio 中将一个项目引用到另一个项目,但实际应用程序并不知道另一个项目的存在。它只知道 "I need to use these DLL files",VS 会在您重建时负责更新 DLL 文件。