Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
sealed — это контекстно-зависимое ключевое слово для ссылочных классов, которое означает, что виртуальный элемент нельзя переопределить или что тип не может использоваться в качестве базового типа.
Примечание.
В стандарте языка ISO C++11 представлено ключевое слово final. Используйте final в стандартных классах, а sealed — в ссылочных классах.
Все среды выполнения
Синтаксис
ref class identifier sealed {...};
virtual return-type identifier() sealed {...};
Параметры
идентификатор
Имя функции или класса.
return-type
Тип, который возвращается функцией.
Замечания
В первом примере синтаксиса запечатан (sealed) класс. Во втором примере запечатана виртуальная функция.
Используйте ключевое слово sealed для ссылочных классов и их виртуальных функций-членов. Дополнительные сведения см. в статье Спецификаторы переопределения и компиляция в машинный код.
Во время компиляции можно определить, запечатан ли тип, используя признак типа __is_sealed(type). Дополнительные сведения см. в статье Compiler Support for Type Traits (C++/CLI and C++/CX) (Поддержка признаков типов компилятором (C++/CLI и C++/CX)).
sealed — контекстно-зависимое ключевое слово. Дополнительные сведения см. в статье Context-Sensitive Keywords (C++/CLI and C++/CX) (Контекстно-зависимые ключевые слова (C++/CLI и C++/CX)).
Среда выполнения 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();
}
X::f override of I1::f
X::f override of I1::g
Y::f override of I1::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 {}
};