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


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

См. раздел Ссылочные классы и структуры.

0w2w91tf.collapse_all(ru-ru,VS.110).gifТребования

Параметр компилятора: /ZW

Среда CLR

(Отсутствует комментарий для этой функции языка, которая применяется только в среде CLR).

0w2w91tf.collapse_all(ru-ru,VS.110).gifТребования

Параметр компилятора: /clr

0w2w91tf.collapse_all(ru-ru,VS.110).gifПримеры

В следующем примере кода показано использование 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 {}
};

См. также

Основные понятия

Расширения компонентов для платформ среды выполнения