深入剖析C 繼承機制7

2021-06-15 21:29:52 字數 957 閱讀 4347

3、繼承中對使用可訪問性級別的限制

宣告型別時,最重要的是檢視該型別是否必須"至少"與其他成員或型別"具有同樣的可訪問性"。例如,直接基類必須至少與派生類具有同樣的可訪問性。以下宣告將導致編譯器錯誤,因為基類 baseclass 的可訪問性小於 myclass:

class baseclass

public class myclass: baseclass // error

下表彙總了對使用宣告的可訪問性級別的限制。

上下文備註

類類型別的直接基類必須至少與類型別本身具有同樣的可訪問性。

介面介面型別的顯式基介面必須至少與介面型別本身具有同樣的可訪問性。

委託委託型別的返回型別和引數型別必須至少與委託型別本身具有同樣的可訪問性。

常數常數的型別必須至少與常數本身具有同樣的可訪問性。

欄位字段的型別必須與至少字段本身具有同樣的可訪問性。

方法方法的返回型別和引數型別必須至少與方法本身具有同樣的可訪問性。

屬性屬性的型別必須至少與屬性本身具有同樣的可訪問性。

事件事件的型別必須至少與事件本身具有同樣的可訪問性。

索引器索引器的型別和引數型別必須至少與索引器本身具有同樣的可訪問性。

運算子運算子的返回型別和引數型別必須至少與運算子本身具有同樣的可訪問性。

建構函式

建構函式的引數型別必須至少與建構函式本身具有同樣的可訪問性。

示例:以下示例包含不同型別的錯誤宣告。每個宣告後的注釋指示了預期的編譯器錯誤。

using system ;

delegate int mydelegate( ) ;

class b

}public class a

//屬性:

public b myprop

} public static b operator + (a m1, b m2)

static void main()} 

深入剖析C 繼承機制2

二 c 中的繼承符合下列規則 1 繼承是可傳遞的。如果c從b中派生,b又從a中派生,那麼c不僅繼承了b中宣告的成員,同樣也繼承了a中的成員。object 類作為所有類的基類。2 派生類應當是對基類的擴充套件。派生類可以新增新的成員,但不能除去已經繼承的成員的定義。3 建構函式和析構函式不能被繼承。除...

深入剖析C 繼承機制4

2 隱藏基類成員 想想看,如果所有的類都可以被繼承,繼承的濫用會帶來什麼後果?類的層次結構體系將變得十分龐,大類之間的關係雜亂無章,對類的理解和使用都會變得十分困難。有時候,我們並不希望自己編寫的類被繼承。另一些時候,有的類已經沒有再被繼承的必要。c 提出了乙個密封類 sealed class 的概...

深入剖析C 繼承機制3

三.訪問與隱藏基類成員 1 訪問基類成員 通過base 關鍵字訪問基類的成員 呼叫基類上已被其他方法重寫的方法。指定建立派生類例項時應呼叫的基類建構函式。基類訪問只能在建構函式 例項方法或例項屬性訪問器中進行。從靜態方法中使用 base 關鍵字是錯誤的。示例 下面程式中基類 person 和派生類 ...