型別成員
更新:2007 年 11 月
Runtime 允許您定義下列型別成員:事件、欄位、巢狀型別、方法和屬性。每一個成員都有簽章 (Signature)。下列表格將描述在 .NET Framework 中使用的型別成員。
成員 |
描述 |
---|---|
定義可回應的事件,以及定義用於訂閱、取消訂閱和產生事件的方法。事件通常是用來通知其他型別有狀態變更。 |
|
欄位 |
描述和包含部分型別狀態。欄位可為執行階段支援的任何型別。 |
在封入型別 (Enclosing Type) 範圍中定義型別。 |
|
方法 |
描述可在型別上執行的作業。方法的簽章會指定所有引數和傳回值可使用的型別。 建構函式 (Constructor) 是一種特殊方法,它會建立新的型別執行個體。 |
為型別的數值或狀態命名,並定義用來取得或設定屬性值的方法。屬性可以是基本型別、基本型別的集合、使用者定義型別或使用者定義型別的集合。屬性通常是用來保持型別的公用 (Public) 介面與型別的實際表示相互獨立。 |
成員特性
一般型別系統允許型別成員具有各種特性,但是所使用的語言並不需要支援所有特性。下列表格將描述這些成員特性。
特性 |
適用於 |
描述 |
---|---|---|
abstract |
方法、屬性和事件 |
型別不提供方法的實作。繼承抽象方法的型別和使用抽象方法實作介面的型別必須提供方法的實作。唯一的例外狀況 (Exception) 是當衍生型別本身也是抽象型別時。所有抽象方法都是虛擬的。 |
private、family、assembly、family 和 assembly、family 或 assembly 或是 public |
全部 |
定義成員的存取範圍:
|
final |
方法、屬性和事件 |
在衍生型別中無法覆寫虛擬方法。 |
initialize-only |
欄位 |
只能初始化數值,在初始化之後即無法寫入。 |
instance |
欄位、方法、屬性和事件 |
如果成員未標記為 static (C# 和 C++)、Shared (Visual Basic)、virtual (C# 和 C++) 或 Overridable (Visual Basic),則為執行個體成員 (沒有 instance 關鍵字)。在記憶體中,這類成員的複本數與使用它的物件數一樣。 |
literal |
欄位 |
指定給欄位的數值是在編譯時間得知的內建實值型別的固定值。常值 (Literal) 欄位有時候也稱為常數。 |
newslot 或 override |
全部 |
定義成員與具有相同簽章的繼承成員之間的互動方式:
預設值為 newslot。 |
static |
欄位、方法、屬性和事件 |
成員屬於定義於其上的型別,而非屬於特定的型別執行個體;即使沒有建立型別執行個體,成員仍然存在,而且供型別的所有執行個體共用。 |
virtual |
方法、屬性和事件 |
方法可由衍生型別實作,而且可以用靜態或動態方式叫用。如果使用動態引動,在執行時期進行呼叫的執行個體型別會決定呼叫哪一個方法實作,而不是由編譯時間得知的型別決定。若要用靜態方式叫用虛擬方法,可能必須將變數轉型為使用方法所需版本的型別。 |
多載化
每一個型別成員都具有唯一 (Unique) 的簽章。方法簽章包含方法名稱和參數清單 (方法引數的順序和型別)。只要簽章不相同,就可以在型別中定義具有相同名稱的多個方法。定義兩個或多個具有相同名稱的方法時,就說這個方法是多載。例如,在 System.Char 中,IsDigit 為多載。一個方法使用 Char,然後傳回 Boolean。其他方法則使用 String 和 Int32,然後傳回 Boolean。參數清單也可以用 varargs 條件約束 (Constraint) 加以限定,指出該方法支援變數引數清單。
繼承、覆寫和隱藏成員
衍生型別會繼承其基底型別的所有成員;也就是說,在衍生型別上會定義這些成員,並供衍生型別使用。繼承成員的行為或品質可用下列兩種方式來修改:
衍生型別可用相同的簽章定義新的成員,如此便可隱藏繼承的成員。您可以將原先為 public 的成員變成 private 成員,或是為標記為 final 的繼承方法定義新的行為。
衍生型別可覆寫繼承的虛擬方法。覆寫方法會提供新的方法定義,叫用方法時將根據執行時期的實值型別,而非根據編譯時間得知的變數型別。只有當虛擬方法未標記為 final,而且新的方法至少可像虛擬方法一樣存取時,方法才可覆寫虛擬方法。