共用方式為


__sealed

注意事項注意事項

本主題僅適用於第 1 版的 Managed Extensions for C++。這個語法只應該用於維護第 1 版的程式碼。請參閱密封如有關在新語法中使用的相等功能。

避免遭到覆寫的方法或類別的基底類別。

__sealed class-specifier
__sealed struct-specifier
__sealed function-declarator

備註

__sealed關鍵字指定的類別方法不能覆寫或類別不可以是基底類別。

當使用__sealed關鍵字,請注意下列幾點:

  • A __sealed無法覆寫虛擬方法。

  • 如果非虛擬的成員方法已標記為__sealed、 __sealed限定性條件會被忽略。

  • A __sealed無法純虛擬方法。

  • __Sealed 搭配使用時,不允許關鍵字 __interface 關鍵字。

當類別 (或結構) 會以標記__sealed,類別可以當做基底類別。 例如:

__sealed __gc class A {
   // ...
};
// error: cannot derive from a sealed class
__gc class B : public A { /* ...*/ };
注意事項注意事項

__sealed搭配使用時,不允許關鍵字__abstract關鍵字。

範例

在下列範例,也就是密封的虛擬方法 (f) 宣告。 此函式接著將覆寫在main(),導致一個編譯器錯誤:

// keyword__sealed.cpp
// compile with: /clr:oldSyntax

#using <mscorlib.dll>
extern "C" int printf_s(const char*, ...);

__gc struct I
{
    __sealed virtual void f()
    { 
        printf_s("I::f()\n"); 
    }
    virtual void g()
    {
        printf_s("I::g()\n");
    }
};

__gc struct A : I 
{
    void f() // C3248 sealed function
    { 
        printf_s("A::f()\n"); 
    }   
    void g()
    {
        printf_s("A::g()\n");
    }
};

int main()
{
    A* pA = new A;

    pA->f();
    pA->g();
}