C 中的抽象類 密封類 靜態類

2021-07-14 14:41:43 字數 1325 閱讀 2032

通過在類定義前面放置關鍵字 abstract,可以將類宣告為抽象類,不能例項化。抽象類的用途是提供乙個可供多個派生類共享的通用基類定義。抽象類也可以定義抽象方法。方法是將關鍵字 abstract 新增到方法的返回型別的前面。抽象方法沒有實現,所以方法定義後面是分號,而不是常規的方法塊。

抽象類的派生類必須實現所有抽象方法。當抽象類從基類繼承虛方法時,抽象類可以使用抽象方法重寫該虛方法。如果將 virtual 方法宣告為 abstract,則該方法對於從抽象類繼承的所有類而言仍然是虛方法。繼承乙個抽象方法的類不能訪問該方法的原始實現。在上乙個示例中,類 f 中的 dowork ()不能呼叫類 d 中的dowork()。通過這種方式,抽象類可以強制派生類為虛方法提供新的方法實現。

public class d

}public abstract class e : d

public class f : e

}通過在類定義前面放置關鍵字 sealed,可以將類宣告為密封類。密封類不能用作基類。因此,它也不能是抽象類。密封類禁止派生。由於密封類從不用作基類,所以有些執行時優化可以略微提高密封類成員的呼叫速度。在對基類的虛成員進行重寫的派生類上,方法、索引器、屬性或事件可以將該成員宣告為密封成員。在用於以後的派生類時,這將取消成員的虛效果。方法是在類成員宣告中將 sealed 關鍵字置於 override 關鍵字的前面。

public sealed class d

public class d : c

}靜態類與非靜態類基本相同,但存在乙個區別:靜態類不能例項化。 也就是說,不能使用 new 關鍵字建立靜態類型別的變數。 因為沒有例項變數,所以要使用類名本身訪問靜態類的成員。 對於只對輸入引數進行運算而不獲取或設定任何內部例項欄位的方法集,靜態類可以方便地用作這些方法集的容器。

和所有類型別一樣,當載入引用靜態類的程式時,.net framework 公共語言執行時 (clr) 將載入該靜態類的型別資訊。程式不能指定載入靜態類的確切時間。 但是,可以保證在程式中首次引用該類前載入該類,並初始化該類的字段並呼叫其靜態建構函式。 靜態建構函式僅呼叫一次,在程式駐留的應用程式域的生存期內,靜態類一直保留在記憶體中。

介紹靜態類的主要特性:

僅包含靜態成員。 

無法例項化。 

是密封的。 

不能包含例項建構函式。

因此,建立靜態類與建立僅包含靜態成員和私有建構函式的類基本相同。私有建構函式阻止類被例項化。 使用靜態類的優點在於,編譯器能夠執行檢查以確保不致偶然地新增例項成員。編譯器將保證不會建立此類的例項。靜態類是密封的,因此不可被繼承。 它們不能從除 object 外的任何類中繼承。靜態類不能包含例項建構函式,但可以包含靜態建構函式。如果非靜態類包含需要進行重要的初始化的靜態成員,也應定義靜態建構函式。

抽象類和密封類

基本概念 包含抽象方法的類叫做抽象類。抽象方法被abstract修飾,類也要由abstract修飾。抽象類中可以有抽象方法,也可以有非抽象方法。抽象類不能建立例項物件 不能new抽象類。抽象類中可以沒有抽象方法,但是抽象方法一定在抽象類中。因為抽象類不能被例項化,抽象方法不能被實現。抽象類和普通類的...

C 抽象類 密封類及類成員

1.抽象類和類成員 使用 abstract 關鍵字可以建立必須在派生類中實現的不完整的類和類成員。例如 public abstract class a 抽象類不能例項化。抽象類的用途是提供多個派生類可共享的基類的公共定義。例如,類庫可以定義乙個作為其多個函式的引數的抽象類,並要求程式設計師使用該庫通...

抽象類 密封類及類成員(C )

使用abstract關鍵字可以建立不完整且必須在派生類中實現的類和類成員。使用sealed關鍵字可以防止繼承以前標記為 virtual 的類或某些類成員。通過在類定義前面放置關鍵字 abstract,可以將類宣告為抽象類。例如 public abstract class a 抽象類不能例項化。抽象類...