Sdílet prostřednictvím


__sealed

 

Publikováno: duben 2016

Poznámka

Toto téma se týká pouze verze 1 spravovaných rozšíření jazyka C++. Tato syntaxe by měla sloužit pouze k udržování kódu verze 1. Viz sealed (C++ Component Extensions) informace o použití ekvivalentní funkce v nové syntaxi.

Zabrání přepsání metody nebo třídy od základní třídy.

Syntaxe

__sealed 
class-specifier
__sealed 
struct-specifier
__sealed 
function-declarator

Poznámky

__sealed Klíčové slovo určuje, že metoda třídy nelze přepsat nebo že třída nemůže být základní třídy.

Při použití __sealed klíčové slovo, mějte na paměti následující body:

  • A __sealed nelze přepsat virtuální metody.

  • Pokud metoda nevirtuální člen je označena __sealed, __sealed kvalifikace je ignorován.

  • A __sealed Metoda nemůže být prázdná.

  • __Sealed klíčové slovo není povoleno, pokud se používá s __interface – klíčové slovo.

Když třídy (nebo struktury) je označena __sealed, třídy nelze použít jako základní třídu. Příklad:

__sealed __gc class A {
   // ...
};
// error: cannot derive from a sealed class
__gc class B : public A { /* ...*/ };

Poznámka

__sealed Klíčové slovo není povoleno, pokud se používá s __abstract klíčové slovo.

Příklad

V následujícím příkladu, zapečetěné virtuální metody (f) je deklarována. Funkce je poté přepsána v main(), způsobí chybu kompilátoru:

// 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();
}