我已经阅读了 C# 中的 const 和 readonly 关键字。这些关键字之间的区别之一是 const 的值在编译时解析,而 readonly 关键字在运行时解析。尽管我没有机会在我的任何项目中实现它们。所以我想尝试一下。我创建了我的库,我将在其他项目中使用它。 mylibrary中的代码如下
namespace MyLibrary
{
public class Class1
{
public static readonly string MyVar = "Vikram";
//public readonly string MyVar;
//public Class1()
//{
// MyVar = "Test";
//}
}
}
现在我将使用这个库作为我的其他控制台项目的引用,如下所示
class Program
{
static void Main(string[] args)
{
//MyLibrary.Class1 class1 = new MyLibrary.Class1();
Console.WriteLine(MyLibrary.Class1.MyVar); // output is vikram
Console.ReadLine();
Console.WriteLine(MyLibrary.Class1.MyVar); // changed to Test but still op as vikram
Console.ReadLine();
}
}
现在,在这两个写入行之间,我将更改库中“MyVar”的值并重新编译它,根据 readonly 的概念,它应该反射(reflect)在控制台项目中,而无需重新编译我的主项目。
如果我对 readonly 关键字的理解有误,请纠正我。
P.S我已经浏览过this的答案关联。在其中一个答案中提到了以下内容
对于只读值,它就像对内存位置的引用。该值未纳入 AssemblyB 的 IL 中。这意味着如果内存位置被更新,程序集 B 无需重新编译即可获取新值。因此,如果 I_RO_VALUE 更新为 30,您只需构建 AssemblyA。所有客户端都不需要重新编译。
谁能解释一下粗线到底是什么意思。我认为这就是我在示例中所做的。
最佳答案
您的理解是正确的,但您无法更改已加载的程序集。您必须重新启动该程序。
我认为您可以通过反射更改 readonly
字段。这使得测试变得更容易。
顺便说一句,只读字段的值必须是运行时值,因为您可以在其上放置任意初始值设定项。 C# 编译器不可能对其进行硬编码,因为它无法静态地知道运行时值。
关于c# - C# 中的 const 和 readonly 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18034105/