在C#程式語言中,const和readonly都是用來聲明常量的關鍵字,但它們有一些重要的差異。以下是兩者的主要區別:
const 關鍵字
不可變性:const表示常量,值在編譯時確定且不可改變。
csharp
複製程式碼
const int MaxValue = 100;
編譯時常量:必須在聲明時初始化,值必須在編譯時就能確定。
csharp
複製程式碼
const double Pi = 3.14159;
隱含的靜態性:const變量隱含地是靜態的,無需static關鍵字來聲明。可以直接通過類名訪問。
csharp
複製程式碼
public class MyClass
{
public const int MaxItems = 50;
}
// 訪問方式
int max = MyClass.MaxItems;
使用場景:適用於那些不會變化且在編譯時已知的常量,如數學常數和固定配置。
readonly 關鍵字
不可變性:readonly表示只讀變量,一旦初始化後在運行期間不可改變,但可以在構造函數中賦值。
csharp
複製程式碼
public readonly int ReadOnlyValue;
運行時常量:可以在聲明時初始化,也可以在構造函數中初始化。
csharp
複製程式碼
public class MyClass
{
public readonly int ReadOnlyValue;
public MyClass(int value)
{
ReadOnlyValue = value;
}
}
實例和靜態:readonly變量可以是實例變量,也可以是靜態變量。
csharp
複製程式碼
public class MyClass
{
public static readonly int StaticReadOnlyValue = 100;
public readonly int InstanceReadOnlyValue;
public MyClass(int value)
{
InstanceReadOnlyValue = value;
}
}
使用場景:適用於那些在運行期間不會變化,但在編譯時無法確定的常量,如需要在構造函數中計算的值。
比較
初始化時間:const必須在聲明時初始化,readonly可以在構造函數中初始化。
靜態性:const隱含地是靜態的,readonly可以是實例變量,也可以是靜態變量。
編譯時 vs 運行時:const是編譯時常量,readonly是運行時常量。