Question

Si une classe a mis en œuvre ICloneable, qu'est-ce que cela veut dire?

Était-ce utile?

La solution

C'est a la méthode IClonable.Clone . La documentation indique que la méthode est destinée à des objets de clone. Les notes de documentation spécifiquement que le clone peut être soit profonde ou peu profonde. Il est également noté le type résultant doit être du même type que l'objet qui est cloné, mais il n'y a aucune garantie dans le système de type qu'il est réellement.

Pour résumer, il ne propose pas beaucoup de promesses difficiles, mais l'intention est de créer des clones indépendants.

Autres conseils

Cela signifie simplement que la classe doit mettre en œuvre une Clone méthode qui renvoie un objet, pas plus que cela. Ainsi, vous pouvez avoir une méthode qui accepte un ICloneable et vous pouvez cloner cet objet.

En fait, il permet simplement la classe à cloner:

http://msdn.microsoft.com/en-us/ bibliothèque / system.icloneable.aspx

Lors de la mise en œuvre toute interface, vous sont nécessaires pour définir les méthodes dans cette interface. Dans ce cas, la méthode Clone devra être défini dans votre classe.

Exemple de Microsoft:

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

ICloneable n'a pas de sens en soi, mais peut être utile en conjonction avec d'autres contraintes (par exemple on peut prévoir qu'un paramètre doit être un Foo qui implémente ICloneable). Ainsi, on pourrait avoir un Foo, un CloneableFoo, un AdvancedFoo et un CloneableAdvancedFoo, ce qui permet des dérivés Foo que le clonage de support à distinguer de ceux qui ne le font pas, mais aussi permettre des routines qui attendent une cloneable Foo d'accepter un dérivé cloneable de Foo.

Malheureusement, alors qu'un paramètre de fonction passée avec des contraintes IClonable et Foo peut être utilisé comme IClonable et comme Foo, sans typecasts, il n'y a aucun moyen de créer un champ répondant à ces critères, et il n'y a aucun moyen de typer un champ. Un remède pour cela peut être de créer un ICloneable (Of T Comme ICloneable (Of T)), qui contient un « clone » méthode qui retourne T, et un « auto » méthode qui renvoie également T (Ainsi, un champ tenant un " ICloneable de Foo » pourrait être accessible comme Foo via la « méthode auto »). Il faudrait un peu de soin pour faire de ce tout le travail, mais le modèle doit être tout à fait agréable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top