__sealed
Примечание
Этот раздел относится только к управляемым расширениям для C++ версии 1.Приведенный здесь синтаксис должен использоваться только для обслуживания кода версия 1.Сведения об использовании аналогичных функциональных возможностей в новом синтаксисе см. в разделе запечатанные.
Запрещает переопределение метода или использование класса в качестве базового класса.
__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();
}