常量变量与参考变量和只读变量

时间:2015-08-21 12:34:52

标签: c# const clr .net-assembly

我有一个类有三种类型的变量 - 常量,只读,像这样的参考变量

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的值并重新编译项目但不重新编译消耗常量的项目时,它引用常量变量的旧值。仅在重新编译消耗项目时,常量项目的新值。这是可以理解的。

但是为什么对于只读和参考变量也观察到这种性质。有价值,如果在他们的创建项目中被更改并且项目被编译,应该在消费项目中改变,消费项目不被重新编译,应该改变但我已经观察到他们指向旧值。

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

1 个答案:

答案 0 :(得分:3)

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

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

这里的关键点是应用程序并不真正了解其他应用程序。因此,虽然您在Visual Studio中将一个项目引用到另一个项目,但实际应用程序并不知道另一个项目是否存在。它所知道的只是"我需要使用这些DLL文件",VS在重建时负责更新DLL文件。