为了使用“不会改变的值”,您可以声明字段为
const
或
static readonly
:
public class Interpolator
{
static readonly int LAYERS = 6;
const int MINIMUM_NEIGHBORS = 1;
}
为了决定使用哪种方法,我使用以下标准:
- 如果它只在此程序集中访问(在Visual Studio中的此项目),请使用
const
。
- 如果可能会被其他程序集访问,请使用
static readonly
。
改进您的示例:
public class Interpolator
{
public static readonly int LAYERS = 6;
internal const int MINIMUM_NEIGHBORS = 1;
private const double SEARCH_RADIUS = 20;
}
为什么要做出这样的区分?
当编译器在表达式中发现一个
const
字段时,它会将该字段替换为其值并进行编译。这非常高效。
int a = 5 * Interpolator.SEARCH_RADIUS
is compiled as:
int a = 100
但是想象一下,您在一个(.dll)程序集中将
Interpolator.SEARCH_RADIUS
定义为一个
const
,并从另一个(.exe)程序集中使用它。
public const double SEARCH_RADIUS = 20;
如果您将来更改了定义,则为:
如果在未来您更改了定义,则为
private const double SEARCH_RADIUS = 10;
重新编译 (.dll) 程序集。如果您不重新编译 (.exe) 程序集,则它仍将使用 a==100
,因为 SEARCH_RADIUS = 20
是 .exe 编译期间使用的值。
如果您已定义
public static readonly double SEARCH_RADIUS = 20;
在.dll文件中,当您将值更改为
10
并仅重新编译(.dll)程序集时,另一个(.exe)程序集会自动获取更改,而无需重新编译。
const
仍然可以避免意外修改任何这些变量。 - Habib