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

本文关键字:变量 只读 Vs 常量 引用 | 更新日期: 2023-09-27 18:09:01

我有一个类,它有三种类型的变量——常量、只读、引用变量,就像这样

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();
    }
}

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

但是为什么只读变量和引用变量也观察到这种性质呢?这些值,如果在它们的创建项目中改变了,并且项目被编译,应该在消费项目中改变,消费项目没有被重新编译,应该改变,但我观察到它们指向旧的值。

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

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

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

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

这里的关键是应用程序并不真正了解其他应用程序。所以尽管你在Visual Studio中引用一个项目到另一个项目,实际的应用程序并不知道另一个项目的存在。它所知道的是"我需要使用这些DLL文件",当你重建时,VS负责更新DLL文件。