我正在尝试声明一个常量 PI:
public static const double PI = Math.PI;
但是为什么会出现这个错误?
The constant 'Calendar.NewCalendar.PI' cannot be marked static
我正在尝试声明一个常量 PI:
public static const double PI = Math.PI;
但是为什么会出现这个错误?
The constant 'Calendar.NewCalendar.PI' cannot be marked static
const
意味着 static
(您不需要实例来引用 const
值)。
我还想补充一点重要的内容:当您链接(引用)一个带有 public const
的程序集时,该值将被复制到您的程序集中。因此,如果被引用程序集中的 const
值发生更改,则您的程序集仍将具有最初编译的值。
如果这种行为是不可接受的,那么您应该考虑将字段设置为 public static readonly
字段。
Lib.dll 是二进制提供的:
public class Foo {
public const int HATS = 42;
public static readonly int GLOVES = 33;
}
App.exe,引用Lib.dll:
Foo.HATS // This will always be 42 even if the value in Lib.dll changes,
// unless App.exe is recompiled.
Foo.GLOVES // This will always be the same as Foo.GLOVES in Lib.dll
来自MSDN:
不要创建常量来表示随时可能更改的信息。例如,不要使用常量字段来存储服务的价格、产品版本号或公司品牌名称等值。这些值随时间而变化,因为编译器会传播常量,所以使用你的库编译的其他代码将必须重新编译才能看到更改。
来自DotNetPerls:
DLL。当您使用
const
字段或声明时,C#编译器实际上会直接在IL代码中嵌入const
变量的值。因此,它本质上将const
擦除为一个单独的实体。注意: 如果依赖于
const
的程序在const
值更改后未重新编译,则它们可能会中断 [因为它们将继续使用之前的值]。
常量是根据定义静态的。
final
吗? - Basheer AL-MOMANI在编译期间,无法替换代码中的常量,也就是说,静态和实例定义没有要求。