常量变量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();
}
}
根据常量类型变量的性质-当我改变常量的值并重新编译项目,但不重新编译正在消耗常量的项目时,它引用常量变量的旧值。只在重新编译消费项目时,项目的新值为常量。这是可以理解的。
但是为什么只读变量和引用变量也观察到这种性质呢?这些值,如果在它们的创建项目中改变了,并且项目被编译,应该在消费项目中改变,消费项目没有被重新编译,应该改变,但我观察到它们指向旧的值。
按照我的说法,当消费项目在没有重新编译的情况下运行时,将加载引用的程序集(它们将被重新编译),并且应该加载新值。
如果不检查,我会假设您需要重新编译消费项目,因为这是复制引用dll的过程。换句话说,如果您不重新编译,您仍然在使用输出bin文件夹中的旧dll。
如果你要手动将dll从你的源输出"bin"复制到你的消费者输出"bin",那么你可以运行应用程序而无需重新编译,它将使用新的值。
这里的关键是应用程序并不真正了解其他应用程序。所以尽管你在Visual Studio中引用一个项目到另一个项目,实际的应用程序并不知道另一个项目的存在。它所知道的是"我需要使用这些DLL文件",当你重建时,VS负责更新DLL文件。