__sealed

备注

本主题仅适用于托管扩展的 1 版 C++ 的。只应在此语法维护 1 版代码。有关使用等效功能的信息在新语法,请参见 sealed

防止一个重写方法或类是基类。

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

备注

__sealed 关键字指定类方法不能重写或类不能是基类。

在使用 __sealed 关键字时,保留以下问题在当初:

  • __sealed 虚方法不能被复盖。

  • 如果一个其成员方法被标记为 __sealed, __sealed 限定被忽略。

  • __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();
}