我们有一个项目被编译成一个名为consts.dll的DLL,其中包含以下内容:
public static class Consts
{
public const string a = "a";
public const string b = "b";
public const string c = "c";
}
我们有多个此类项目,每个项目都编译成同名的DLL(consts.dll),并根据需要替换它们。
我们还有另一个使用这些const的类:
public class ConstsUser
{
string f() { return Consts.a; }
}
不幸的是,
Consts.a
被优化为“a”,所以即使我们替换Consts.dll实现,我们仍然会得到“a”而不是正确的值,并且我们需要重新编译ConstsUser
。是否有任何方法可以阻止优化器将const变量替换为其值? 最佳答案
我认为static readonly
修饰符的使用符合您的需求:
public static class Consts
{
public static readonly string a = "a";
public static readonly string b = "b";
public static readonly string c = "c";
}
常量在调用站点上进行了硬编码,因此这就是您的问题。静态只读变量只能在
Consts
类的变量声明或静态构造函数中进行修改,并且不会在调用站点上内联。