3 Stimmen

Zuweisung des Klons einer Instanz an die Basisschnittstelle

Sagen wir:

public interface IBase
{
// Stuff
}

public class Derived : IBase
{
// Stuff
}

Wenn Sie

Derived instance_ = new CDrv(); 
Ibase ibase = instance_; // Line 1

Ist dies eine implizite Umwandlung oder eine Zuweisung?

Ist es möglich, einen Klon zu erstellen von instance_ und zuweisen/umwandeln in ibase vielleicht durch Überschreiben der Konvertierung oder des Zuweisungsoperators oder einer anderen Methode?

Oder anders gesagt, gibt es eine Möglichkeit, die instance_ nach dem Wert und nicht nach der Struktur? Ich möchte nicht, dass es eine Struktur ist, weil ich eine Reihe von Funktionen habe, die Folgendes zurückgeben Derived und die oben genannte Umwandlung/Zuweisung wird nur selten vorkommen.

6voto

Reed Copsey Punkte 536986

Es gibt keine implizite Konvertierung, die das Objekt klont.

Sie müssten einen Mechanismus entwickeln, der das Objekt "klont" (möglicherweise durch ICloneable (obwohl diese Schnittstelle nicht ideal ist), entweder über eine Methode oder einen neuen Konstruktor:

IBase ibase = new Derived(instance_); // Using "copy constructor" you create

Oder:

IBase ibase = instance_.Clone(); // ie: implement ICloneable, or similar mechanism

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X