Поделиться через


__sealed

Примечание

Этот раздел применим только к версии 1 управляемых расширений для C++.Этот синтаксис должен использоваться только для поддержания Кода версии 1.См. запечатанные дополнительные сведения об использовании эквивалентным функциям в новом синтаксисе.

Предотвращает метод в класс от или переопределенным базовым классом.

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

Заметки

__sealed ключевое слово указывает, что метод класса нельзя переопределить или что класс не может быть базовым классом.

При использовании __sealed ключевое слово содержит следующие элементы в виду:

  • A __sealed виртуальный метод не может быть переопределен.

  • Если элемент помечен nonvirtual метод __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();
}