阿摩線上測驗 登入

申論題資訊

試卷:105年 - 105 高等考試_三級_資訊處理:程式語言#54488
科目:程式語言
年份:105年
排序:0

題組內容

四、請回答以下問題:

申論題內容

⑵請比較 C#程式語言中關鍵字 const 與 readonly 差異。(10 分)

詳解 (共 2 筆)

詳解 提供者:hchungw
在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是運行時常量。
詳解 提供者:114年高考上榜

在C#程式語言中,const和readonly關鍵字都用於定義常數,但它們之間有幾個重要的區別。

 
賦值時機不同
const關鍵字用於定義在編譯時期已知的常量,必須在聲明時進行初始化,且初始化後就不能再修改其值。而readonly關鍵字用於定義在執行時期才能確定的常量,必須在聲明時或在構造函數中進行初始化,且可以在初始化後進行修改。
 
作用範圍不同
const關鍵字可以用於定義任何作用範圍的常量,包括類、結構、方法等。而readonly關鍵字只能用於定義實例成員變量或靜態成員變量。
 
效能差異
在C#編譯器中,const常量在編譯時期就被儲存在編譯器生成的程序集中,因此在執行時期沒有額外的執行代碼。而readonly變量的值是在執行時期確定的,每次使用它時都需要計算,因此可能會對性能產生微小的影響。
 
總的來說,const和readonly關鍵字都可以用於定義常量,但它們的用途略有不同。如果您需要定義在編譯時期已知的常量,且希望在整個程式碼中都可以使用,那麼const是一個更好的選擇。如果您需要定義在執行時期才能確定的常量,或者需要在實例成員變量或靜態成員變量中使用常量,那麼readonly是更合適的選擇