Sdílet prostřednictvím


Explicitní přepsání člena rozhraní

Syntaxe pro deklarování explicitního přepsání člene rozhraní v rámci třídy se změnila ze způsobů ze Správce rozšíření pro C++ na způsob z Visual C++ 2010.

Často byste chtěli poskytnout dvě instance člena rozhraní v rámci třídy, která implementuje rozhraní – jedna, která se používá, když jsou objekty třídy manipulovány prostřednictvím popisovače rozhraní a druhá, která se používá, když se objekty třídy používají prostřednictvím rozhraní třídy. Příklad:

public __gc class R : public ICloneable {
   // to be used through ICloneable
   Object* ICloneable::Clone();

   // to be used through an R
   R* Clone();
};

Ve spravovaném rozšíření toto provedeme, pokud poskytneme explicitní deklaraci metody rozhraní s názvem metody, která je kvalifikovaná na základě názvu rozhraní. Instance specifická pro třídu je neúplná. Tím je odstraněna nutnost downcast návratové hodnoty Clone, v tomto příkladu při explicitním volání prostřednictvím instance R.

V nové syntaxi byl představen obecný mechanismus přepsání, který nahradí syntaxi ze spravovaného rozšíření. Náš příklad by byl přepsán takto:

public ref class R : public ICloneable {
public:
   // to be used through ICloneable
   virtual Object^ InterfaceClone() = ICloneable::Clone;

   // to be used through an R
   virtual R^ Clone();
};

Tato revize vyžaduje, aby byl člen rozhraní explicitně přepsán tím, že se mu přidělí jedinečný název v rámci třídy. Zde jsme zadali nevhodný název pro InterfaceClone. Chování je stále stejné – vyvolání prostřednictvím rozhraní ICloneable vyvolá přejmenované InterfaceClone, zatímco volání prostřednictvím objektu typu R vyvolá druhou instanci Clone.

Viz také

Odkaz

Explicit Overrides

Koncepty

Členské deklarace v rámci třídy nebo rozhraní