Zapečetění virtuální funkce
Syntaxe pro zapečetění virtuální funkce se změnila ze způsobů ze Správce rozšíření pro C++ na způsob z Visual C++ 2010.
Klíčové slovo __sealed je použito ve spravovaných rozšířeních k úpravám buď odkazového typu, zakazuje následné odvození z něj (viz Deklarace spravovaného typu třídy), nebo k úpravě virtuální funkce, zakazuje následné přepsání metody v odvozené třídě. Příklad:
__gc class base { public: virtual void f(); };
__gc class derived : public base {
public:
__sealed void f();
};
V tomto příkladu derived::f() přepisuje instanci base::f() na základě přesné shody prototypu funkce. Klíčové slovo __sealed označuje, že následná třída zděděná z odvozené třídy nemůže poskytnout přepsání derived::f().
V nové syntaxi je klíčové slovo sealed umístěno za signaturu a ne kdekoli před prototypem skutečné funkce, jak tomu bylo dříve. Kromě použití sealed také vyžaduje explicitní použití klíčového slova virtual. Správný překlad výše uvedeného derived je následující:
ref class derived: public base {
public:
virtual void f() override sealed;
};
Neexistence klíčového slova virtual má v tomto případě za následek chybu. V nové syntaxi může být kontextové klíčové slovo abstract použito místo =0, abyste označili čistou virtuální funkci. Toto nebylo podporováno v rámci spravovaného rozšíření. Příklad:
__gc class base { public: virtual void f()=0; };
může být přepsán jako
ref class base { public: virtual void f() abstract; };