为了使用“不会改变的值”,您可以声明字段const
或static readonly
:
public class Interpolator
{
// Free parameters
static readonly int LAYERS = 6;
const int MINIMUM_NEIGHBORS = 1;
}
为了决定其中一个,我使用以下标准:
- 如果仅在此程序集(Visual Studio 中的此项目)中访问它,请使用
const
.
- 如果其他程序集可以访问它,请使用
static readonly
.
改进你的例子:
public class Interpolator
{
// Free parameters
public static readonly int LAYERS = 6;
internal const int MINIMUM_NEIGHBORS = 1; // internal means public to this assembly but private to other assemblies.
private const double SEARCH_RADIUS = 20;
}
为什么要做出这样的区分?当编译器const
在表达式中找到一个字段时,它会用该字段的值替换该字段并对其进行编译。这是非常有效的。
int a = 5 * Interpolator.SEARCH_RADIUS;
编译为:
int a = 100;
但是假设您已在 (.dll) 程序集中Interpolator.SEARCH_RADIUS
定义为 a 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) 程序集将自动获得更改,无需重新编译。