爲了使用「的價值觀,不會改變」,你可以聲明字段或者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)組件定義爲const
Interpolator.SEARCH_RADIUS
,並用它弗朗另一個文件(.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),議會將自動獲得的變化,而不需要重新編譯。
非常有用的信息。但是這些變量是私有的,只能在這個類的方法中使用。 – heltonbiker
@heltonbiker,如果他們是私人的,那麼他們不能在課堂外訪問,但仍然把它們作爲'const'將會使你免於意外修改任何這些變量。 – Habib
不錯,這就是主意。即使這個項目完全在內部編程,您提到的這些意外(錯誤)修改可能隨時發生。謝謝! – heltonbiker