我试图像这样声明一个PI常量:
public static const double PI = Math.PI;
Run Code Online (Sandbox Code Playgroud)
但为什么我会收到此错误?
The constant 'Calendar.NewCalendar.PI' cannot be marked static
Run Code Online (Sandbox Code Playgroud)
Jon*_*art 189
const
暗示static
(您不需要实例来引用该const
值).
我还要添加这一重点:当您使用a链接(引用)程序集时public const
,该值将被复制到程序集中.因此,如果const
引用的程序集中的值发生更改,则程序集仍将具有最初编译的值.
如果这种行为是不接受的,那么你应该考虑做该领域的public static readonly
领域.
Lib.dll,以二进制形式提供:
public class Foo {
public const int HATS = 42;
public static readonly int GLOVES = 33;
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
来自MSDN:
不要创建常量来表示您希望随时更改的信息.例如,不要使用常量字段来存储服务价格,产品版本号或公司的品牌名称.这些值可能会随着时间的推移而发生变化,并且由于编译器会传播常量,因此必须重新编译使用库编译的其他代码以查看更改.
来自DotNetPerls:
DLL文件.当您使用
const
字段或声明时,C#编译器实际上将const
变量的值直接嵌入IL代码中.因此,它基本上将const
作为一个单独的实体删除.注意:如果
const
在const
值更改后没有重新编译依赖于a的程序,它们可能会中断[ 因为它们将继续使用之前的值 ].
归档时间: |
|
查看次数: |
31653 次 |
最近记录: |