共用方式為


sealed (C++ 元件擴充功能)

sealed 是 ref 類別的內容相關性關鍵字,表示虛擬成員無法加以覆寫,或者型別不能當做基底型別。

注意事項注意事項

ISO C++11 標準語言有在 Visual Studio 中支援的 final 關鍵字。在標準類別中使用 final,而在 ref 類別中使用 sealed。

所有執行階段

語法

ref class identifier sealed {...};
virtual return-type identifier() sealed {...};

參數

  • identifier
    函式或類別的名稱。

  • 傳回型別
    由函式所傳回的型別。

備註

在第一個語法範例中,類別是密封的。 在第二個範例中,虛擬函式已密封。

sealed 關鍵字適用於原生目標,也適用於 Windows 執行階段 和 Common Language Runtime (CLR)。 如需詳細資訊,請參閱覆寫規範與原生編譯

您可以使用 __is_sealed (type) 型別特性,在編譯時期偵測型別是否已密封。 如需詳細資訊,請參閱型別特性的編譯器支援 (C++ 元件擴充功能)

sealed 是內容相關性關鍵字。 如需詳細資訊,請參閱視內容而有所區別的關鍵字 (C++ 元件擴充功能)

Windows 執行階段

請參閱 Ref 類別與結構

0w2w91tf.collapse_all(zh-tw,VS.110).gif需求

編譯器選項:/ZW

Common Language Runtime

(這個語言功能沒有只適用於 Common Language Runtime 的備註)。

0w2w91tf.collapse_all(zh-tw,VS.110).gif需求

編譯器選項:/clr

0w2w91tf.collapse_all(zh-tw,VS.110).gif範例

下列程式碼範例會示範 sealed 在虛擬成員上的效果。

// sealed_keyword.cpp
// compile with: /clr
interface struct I1 {
   virtual void f();
   virtual void g();
};

ref class X : I1 {
public:
   virtual void f() {
      System::Console::WriteLine("X::f override of I1::f");
   }

   virtual void g() sealed {
      System::Console::WriteLine("X::f override of I1::g");
   }
};

ref class Y : public X {
public:
   virtual void f() override {
      System::Console::WriteLine("Y::f override of I1::f");
   }

   /*
   // the following override generates a compiler error
   virtual void g() override {
      System::Console::WriteLine("Y::g override of I1::g");
   }  
   */
};

int main() {
   I1 ^ MyI = gcnew X;
   MyI -> f();
   MyI -> g();

   I1 ^ MyI2 = gcnew Y;
   MyI2 -> f();
}

Output

  
  
  

下一個程式碼範例示範如何將類別標記為密封。

// sealed_keyword_2.cpp
// compile with: /clr
interface struct I1 {
   virtual void f();
};

ref class X sealed : I1 {
public:
   virtual void f() override {}
};

ref class Y : public X {   // C3246 base class X is sealed
public:
   virtual void f() override {}
};

請參閱

概念

執行階段平台的元件擴充功能