sealed (расширения компонентов C++)
sealed — это контекстно-зависимое ключевое слово для ссылочных классов, которое означает, что виртуальный член нельзя переопределить или что тип не может использоваться в качестве базового типа.
Примечание |
---|
Стандарт языка ISO C++11 имеет ключевое слово final, которое поддерживается в Visual Studio.Используйте final в стандартных классах, и sealed в ссылочных классах. |
Все среды выполнения
Синтаксис
ref class identifier sealed {...};
virtual return-type identifier() sealed {...};
Параметры
identifier
Имя функции или класса.return-type
Тип, который возвращается функцией.
Заметки
В первом примере синтаксиса класс запечатан.Во втором примере запечатана виртуальная функция.
Ключевое слово sealed является допустимым для собственных целевых объектов, а также для Среда выполнения Windows и среды CLR.Дополнительные сведения см. в разделе Спецификаторы переопределения и собственные компиляции.
Во время компиляции можно определить, запечатан ли тип, используя характеристику типа __is_sealed (type).Дополнительные сведения см. в разделе Поддержка характеристик типов компилятором (расширения компонентов C++).
sealed — это контекстно-зависимое ключевое слово.Для получения дополнительной информации см. Контекстные ключевые слова (расширения компонентов C++).
Среда выполнения Windows
См. раздел Ссылочные классы и структуры.
Требования
Параметр компилятора: /ZW
Среда CLR
(Отсутствует комментарий для этой функции языка, которая применяется только в среде CLR).
Требования
Параметр компилятора: /clr
Примеры
В следующем примере кода показано использование 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();
}
Вывод
В следующем примере кода показано, как пометить класс как запечатанный.
// 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 {}
};