3 votes

Question sur l'ICloneable

Si une classe implémentée ICloneable Qu'est-ce que ça veut dire ?

6voto

Albin Sunnanbo Points 30722

C'est-à-dire qu'il a le IClonable.Clone méthode. La documentation indique que cette méthode est destinée à cloner des objets. Elle précise que le clone peut être profond ou superficiel. Il est également noté que le type résultant debe ê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 en soit réellement ainsi.

En résumé, il n'offre pas beaucoup de promesses fermes, mais l'intention est de créer des clones indépendants.

0voto

Evan Mulawski Points 28536

En gros, cela permet simplement de cloner la classe :

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

Lorsque vous implémentez une interface, vous êtes tenu de définir les méthodes de cette interface. Dans ce cas, la méthode Clone devra être définie dans votre classe.

Exemple de Microsoft :

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

0voto

Oskar Kjellin Points 8728

Cela signifie simplement que la classe doit implémenter une méthode Clone qui renvoie un objet, pas plus que ça. Vous pouvez donc avoir une méthode qui accepte un ICloneable et ensuite vous pouvez cloner cet objet.

0voto

supercat Points 25534

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, permettant aux dérivés de Foo qui supportent le clonage d'être distingués de ceux qui ne le supportent pas, mais permettant aussi aux routines qui attendent un Foo clonable d'accepter un dérivé clonable de Foo.

Malheureusement, alors qu'un paramètre de fonction transmis avec les contraintes IClonable et Foo peut être utilisé comme IClonable et comme Foo, sans typage, il n'existe aucun moyen de créer un champ répondant à ces critères, ni aucun moyen de typage d'un champ. Un remède à ce problème pourrait être de créer un ICloneable(Of T As ICloneable(Of T)), qui contient une méthode "Clone" qui renvoie T, et une méthode "Self" qui renvoie également T (Ainsi, un champ contenant un "ICloneable Of Foo" pourrait être accessible en tant que Foo via la méthode "Self"). Un peu de soin serait nécessaire pour que tout cela fonctionne, mais le modèle devrait être assez agréable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X