sealed (C++/CLI e C++/CX)

sealed é uma palavra-chave contextual para classes de referência que indica que um membro virtual não pode ser substituído, ou que um tipo não pode ser usado como um tipo base.

Observação

A linguagem padrão ISO 11 do C++introduziu a palavra-chave final. Use final em classes padrão e sealed em classes ref.

Todos os Runtimes

Sintaxe

ref class identifier sealed {...};
virtual return-type identifier() sealed {...};

Parâmetros

identifier
O nome da função ou classe.

return-type
O tipo retornado por uma função.

Comentários

No primeiro exemplo de sintaxe, uma classe é “sealed”. No segundo exemplo, uma função virtual é “sealed”.

Use a palavra-chave sealed para as classes ref e suas funções de membro virtual. Saiba mais em Especificadores de substituição e compilações nativas.

Você pode detectar se um tipo é “sealed” usando o traço de tipo __is_sealed(type) no tempo de compilação. Saiba mais em Suporte para compilador de traços de tipo.

sealed é uma palavra-chave contextual. Saiba mais em Palavras-chave contextuais.

Windows Runtime

Confira Classes e structs ref.

Requisitos

Opção do compilador: /ZW

Common Language Runtime

(Não há comentários para esse recurso de linguagem que se apliquem apenas ao Common Language Runtime.)

Requisitos

Opção do compilador: /clr

Exemplos

O exemplo de código a seguir mostra o efeito de sealed em um membro virtual.

// 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

O próximo exemplo de código mostra como marcar uma classe como “sealed”.

// 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 {}
};

Confira também

Extensões de componentes para .NET e UWP