Explizites Überschreiben eines Schnittstellenmembers
Aktualisiert: November 2007
Die Syntax für das Deklarieren einer expliziten Überschreibung eines Schnittstellenmembers innerhalb einer Klasse hat sich gegenüber Managed Extensions for C++ in Visual C++ 2008 geändert.
Oft ist es von Vorteil, zwei Instanzen eines Schnittstellenmembers innerhalb einer Klasse bereitzustellen, die die Schnittstelle implementiert – eine Instanz wird verwendet, wenn Klassenobjekte über einen Schnittstellenhandler bearbeitet werden, die andere, wenn Klassenobjekte über die Klassenschnittstelle verwendet werden. Beispiel:
public __gc class R : public ICloneable {
// to be used through ICloneable
Object* ICloneable::Clone();
// to be used through an R
R* Clone();
};
In Managed Extensions geschieht dies durch Bereitstellen einer expliziten Deklaration der Schnittstellenmethode mit dem Methodennamen, der mit dem Namen der Schnittstelle qualifiziert wird. Die klassenspezifische Instanz ist nicht qualifiziert. Auf diese Weise muss in dem Beispiel der Rückgabewert von Clone nicht mehr umgewandelt werden, wenn er explizit über eine Instanz von R aufgerufen wird.
In der neuen Syntax wurde ein allgemeiner Überschreibungsmechanismus eingeführt, der die Managed Extensions-Syntax ersetzt. Das Beispiel würde wie folgt umgeschrieben werden:
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();
};
Diese Korrektur erfordert, dass der explizit überschriebene Schnittstellenmember einen eindeutigen Namen in der Klasse erhält. Hier wurde der komplizierte Name InterfaceClone bereitgestellt. Das Verhalten bleibt gleich – über die ICloneable-Schnittstelle wird der umbenannte InterfaceClone, aufgerufen, während über ein Objekt vom Typ R die zweite Clone-Instanz aufgerufen wird.
Siehe auch
Konzepte
Memberdeklarationen innerhalb einer Klasse oder Schnittstelle