Y a-t-il une raison particulière pourquoi un générique `` n’existe pas ?
Il serait beaucoup plus à l’aise, si je n'avais pas besoin de transtyper je clone quelque chose à chaque fois.
Y a-t-il une raison particulière pourquoi un générique `` n’existe pas ?
Il serait beaucoup plus à l’aise, si je n'avais pas besoin de transtyper je clone quelque chose à chaque fois.
En plus de Andrey réponse (dont je suis d'accord avec, +1) - ICloneable
est fait, vous pouvez également choisir la mise en œuvre explicite de rendre public l' Clone()
retour typé objet:
public Foo Clone() { /* your code */ }
object ICloneable.Clone() {return Clone();}
Bien sûr, il y a un deuxième problème avec un générique ICloneable<T>
- l'héritage.
Si j'ai:
public class Foo {}
public class Bar : Foo {}
Et j'ai implémenté ICloneable<T>
, alors dois-je mettre en oeuvre ICloneable<Foo>
? ICloneable<Bar>
? Vous démarrez rapidement la mise en œuvre d'un lot à l'identique des interfaces...
Comparer à un casting... et est-il vraiment si mauvais?
ICloneable est considéré une API mauvaise maintenant, puisqu’il ne précise pas si le résultat est une profonde ou une copie superficielle. Je pense que c’est la raison pour laquelle ils ne s’améliorent pas cette interface.
Vous pouvez probablement faire une méthode d’extension clonage typée, mais je pense qu’il faudrait un nom différent, étant donné que les méthodes d’extension sont moins prioritaires que les originaux.
J'ai besoin de demander, exactement ce que voulez-vous faire avec l'interface autre que de la mettre en œuvre? Les Interfaces sont généralement seulement utile lorsque vous lancez pour elle (c'est à dire est-ce à l'appui de classe 'IBar"), ou ont des paramètres ou des poseurs qui le prendre (c'est à dire je prends un 'IBar'). Avec ICloneable - nous sommes allés à travers l'ensemble de la structure et a échoué à trouver une seule utilisation qui était autre chose qu'une mise en œuvre. Nous avons également échoué à trouver toute utilisation dans le 'monde réel' qui n'est autre chose que de le mettre en œuvre (dans le ~de 60 000 applications que nous avons accès à l').
Maintenant, si vous souhaitez juste d'appliquer un modèle que vous voulez de votre "clonable" des objets à mettre en œuvre, c'est tout à fait amende à l'utilisation et à aller de l'avant. Vous pouvez également décider exactement ce que le "clonage" signifie pour vous (c'est à dire profonde ou peu profonde). Toutefois, dans ce cas, il n'y a pas besoin de nous (BCL) de la définir. Nous n'définir des abstractions de la BCL quand il y a un besoin d'échanger des instances de taper comme cette abstraction entre les indépendants les bibliothèques.
David Kean (BCL Équipe)
Il est assez facile d’écrire l’interface vous-même si vous en avez besoin :
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.