Frage

Wenn eine Klasse implementiert ICloneable, was bedeutet das?

War es hilfreich?

Lösung

Das heißt hat die IClonable.Clone Methode. Die Dokumentation sagt, dass das Verfahren zu klonen Objekte gedacht. Die Dokumentation Hinweise speziell, dass der Klon kann entweder tief oder flach sein. Es ist auch das der resultierende Typ muss von der gleichen Art wie das Objekt festgestellt, die geklont wird, aber es gibt keine Garantie, in der Art System, dass es tatsächlich so ist.

Um es zusammenzufassen, es bietet nicht viel harte Versprechungen, aber die Absicht ist, unabhängige Klone zu schaffen.

Andere Tipps

Es bedeutet nur, dass die Klasse eine Methode Clone dass gibt ein Objekt implementieren muss, nicht mehr als das. So können Sie eine Methode, die eine ICloneable akzeptiert und dann können Sie das Objekt klonen.

Im Grunde ist es erlaubt, nur die Klasse geklont werden:

http://msdn.microsoft.com/en-us/ Bibliothek / system.icloneable.aspx

Wenn jede Schnittstelle implementieren, müssen Sie die Methoden in dieser Schnittstelle definieren. In diesem Fall muß die Clone-Methode in der Klasse definiert werden.

Beispiel von Microsoft:

public object Clone()
{
    return this.MemberwiseClone();
}

ICloneable ist nicht sinnvoll für sich, sondern kann auch in Verbindung mit anderen Randbedingungen nützlich sein (zum Beispiel könnte man vorsehen, dass ein Parameter ein Foo, dass Arbeitsgeräte ICloneable sein muss). So könnte man ein Foo, einen CloneableFoo, ein AdvancedFoo und ein CloneableAdvancedFoo, so dass Foo Derivate, dass die Unterstützung Klonen von denen unterscheiden, die dies nicht tun, sondern auch Routinen erlauben, dass ein klonbar Foo erwarten ein klonbar Derivat von Foo zu akzeptieren.

Leider, während ein Funktionsparameter mit IClonable und Foo Einschränkungen weitergegeben werden können, ohne Typumwandlungen als IClonable und als Foo, verwendet werden, gibt es keine Möglichkeit, ein Feld Erfüllung dieser Kriterien zu schaffen, noch ist es eine Möglichkeit, um ein Feld zu typisieren. Eine Abhilfe für dieses sein kann, eine ICloneable (Of T Als ICloneable (Of T)) zu erstellen, die eine „Clone“ Methode enthält, dass die Renditen T und ein „Selbst“ Methode, die T auch zurückgibt (also ein Feld ein Halte " ICloneable Of Foo) Selbst ‚Methode“ könnte über die als Foo zugegriffen werden‘. Eine wenig Pflege benötigt würde, dies alles funktioniert, aber das Muster sollte ganz nett sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top