共用方式為


陰影和覆寫之間的差異 (Visual Basic)

當您定義一個類別以繼承自基類時,有時您可能希望在衍生類別中重新定義基類中的一個或多個成員。 陰影和覆寫都可用於此目的。

比較

當衍生類別繼承自基類時,會使用遮蔽和覆寫,並用另一個元素重新定義一個已宣告的元素。 但兩者之間有顯著差異。

下表比較陰影與覆寫。

比較點 陰影 覆寫
目標 防止後續的基類修改,引進您已在衍生類別中定義的成員 使用相同呼叫序列1定義程式或屬性的不同實作,以達到多型
重新定義的元素 任何宣告的項目類型 只有程序 (FunctionSubOperator)或屬性
重新定義元素 任何宣告的項目類型 只有具有相同呼叫序列1 的程序或屬性
重新定義元素的存取層級 任何存取層級 無法變更被覆寫元素的存取層級
重新定義元素的可讀性和可寫入性 任何組合 無法變更覆寫屬性的可讀性或可寫入性
對重新定義的掌控 基類元素無法強制或禁止遮蔽 基類專案可以指定 MustOverrideNotOverridableOverridable
關鍵詞使用方式 Shadows 在衍生類別中建議使用; 假設未指定ShadowsShadowsOverrides OverridableMustOverride 為基類的必要條件; Overrides 為衍生類別中的必要條件
從從您已衍生的類別衍生出來的類別中,元素重新定義的繼承 進一步派生類別繼承的被覆蓋的元素;被覆蓋的元素仍然隱藏3 覆寫由進一步衍生類別繼承的專案;覆寫的專案仍被覆寫

1呼叫序列包含項目類型 (Function、 或 SubOperator), 名稱、 Property參數清單和傳回類型。 您無法使用 屬性或其他方式覆寫程式。 您無法以另一種類型覆寫一種程式 (FunctionSubOperator) 。

2 如果您未指定 ShadowsOverrides,編譯程式會發出警告訊息,以協助您確定要使用的重新定義類型。 如果您忽略警告,則會使用陰影機制。

3 如果在進一步的衍生類別中無法存取遮蔽元素,則遮蔽行為不會被繼承。 例如,如果您將陰影專案宣告為 Private,衍生自衍生類別的類別會繼承原始專案,而不是陰影專案。

指導方針

您通常會在下列情況下使用覆寫:

  • 您正在定義多型衍生類別。

  • 您想要讓編譯程式強制執行相同的元素類型和呼叫序列的安全性。

您通常會在下列情況下使用陰影:

  • 您預期您的基類可能會遭到修改,並且您需要定義一個與您相同名稱的元素。

  • 您要變更項目類型或呼叫序列的自由。

另請參閱