Domanda

Se una classe implementata ICloneable, che cosa significa?

È stato utile?

Soluzione

Questa è ha la href="http://msdn.microsoft.com/en-us/library/system.icloneable.clone.aspx" rel="nofollow"> IClonable.Clone metodo deve sia dello stesso tipo dell'oggetto che è clonato, ma non v'è alcuna garanzia nel sistema tipo che in realtà è così.

Per riassumere, non offre molto duri promesse, ma l'intento è quello di creare cloni indipendenti.

Altri suggerimenti

E 'solo significa che la classe deve implementare un metodo Clone che restituisce un oggetto, non di più. Così si può avere un metodo che accetta un ICloneable e quindi è possibile clonare l'oggetto.

In sostanza, permette solo la classe da clonare:

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

Quando si implementa alcuna interfaccia, si sono tenuti a definire i metodi di tale interfaccia. In questo caso, il metodo Clone dovrà essere definito nella tua classe.

Esempio di Microsoft:

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

ICloneable non ha significato di per sé, ma può essere utile insieme ad altri vincoli (ad es.si potrebbe prevedere che un parametro debba essere un Foo che implementa ICloneable).Pertanto, si potrebbe avere un Foo, un CloneableFoo, un AdvancedFoo e un CloneableAdvancedFoo, consentendo di distinguere i derivati ​​Foo che supportano la clonazione da quelli che non lo fanno, ma consentendo anche alle routine che si aspettano che un Foo clonabile accetti un derivato clonabile di Foo.

Sfortunatamente, sebbene un parametro di funzione passato con i vincoli IClonable e Foo possa essere utilizzato come IClonable e come Foo, senza typecast, non c'è modo di creare un campo che soddisfi tali criteri, né esiste alcun modo per typecast un campo.Un rimedio a questo potrebbe essere quello di creare un ICloneable(Of T As ICloneable(Of T)), che contiene un metodo "Clone" che restituisce T e un metodo "Self" che restituisce anche T (quindi, un campo che contiene un " È possibile accedere a ICloneable Of Foo" come Foo tramite il metodo "Self").Sarebbe necessaria un po' di attenzione per far funzionare tutto, ma il modello dovrebbe essere piuttosto carino.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top