我有一个类有三种类型的变量 - 常量,只读,像这样的参考变量
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的值并重新编译项目但不重新编译消耗常量的项目时,它引用常量变量的旧值。仅在重新编译消耗项目时,常量项目的新值。这是可以理解的。
但是为什么对于只读和参考变量也观察到这种性质。有价值,如果在他们的创建项目中被更改并且项目被编译,应该在消费项目中改变,消费项目不被重新编译,应该改变但我已经观察到他们指向旧值。
按照我的说法,在没有重新编译的情况下运行消费项目时,会加载引用的程序集(重新编译它们)并应加载新值。
答案 0 :(得分:3)
如果不进行检查,我会假设您需要重新编译使用项目,因为这是复制引用的DLL的过程。换句话说,如果您不重新编译,则仍在使用输出bin文件夹中的旧DLL。
如果您要将源输出" bin"中的DLL手动复制到您的消费者输出" bin"然后你可以运行应用程序而无需重新编译,它将使用新值。
这里的关键点是应用程序并不真正了解其他应用程序。因此,虽然您在Visual Studio中将一个项目引用到另一个项目,但实际应用程序并不知道另一个项目是否存在。它所知道的只是"我需要使用这些DLL文件",VS在重建时负责更新DLL文件。