134 votes

C# vs génériques de Java

J’ai entendu que la mise en oeuvre Java de médicaments génériques n’est pas aussi bon que la mise en œuvre c#. Car la syntaxe ressemble, qu’est-ce qui est de qualité inférieure sur l’implémentation de Java, ou est-ce un point de vue religieux ?

183voto

JaredPar Points 333733

streloksi du lien , qui fait un excellent travail de décomposition des différences. Le rapide et sale résumé est bien ...

En termes de syntaxe et de l'utilisation. La syntaxe est à peu près la même entre les langues. Quelques bizarreries ici et là (notamment dans les contraintes). Mais, fondamentalement, si vous pouvez le lire, vous pouvez lire/utiliser les autres.

La plus grande différence est cependant dans la mise en œuvre.

Java utilise la notion de type d'effacement de mettre en œuvre des génériques. En bref, le sous-jacent des classes compilées ne sont pas réellement générique. La compilation de l'Objet et des moulages. En effet Java les génériques sont un moment de la compilation artefact et peut facilement être subverti au moment de l'exécution.

C# d'autre part, en vertu de la CLR, de mettre en œuvre des génériques tout ce qu'ils chemin vers le bas pour le byte code. Le CLR a eu plusieurs modifications importantes afin de soutenir les médicaments génériques en 2.0. Les avantages sont des améliorations de performances, de profondeur de sécurité de type de vérification et de réflexion.

De nouveau à la condition d' un lien beaucoup plus en profondeur de la rupture je vous encourage à lire

39voto

coobird Points 70356

La différence se résume à une décision de conception par Microsoft et Sun.

Les médicaments génériques en Java est mis en œuvre par type d'effacement par le compilateur, ce qui signifie que la vérification de type se produit au moment de la compilation, et le type d'informations est supprimé. Cette approche a été adoptée afin de continuer l'héritage de code compatible avec le nouveau code, l'utilisation de génériques:

De La Java Des Tutoriels, Des Génériques: Type D'Effacement:

Quand un type générique est instancié, le compilateur traduit ces types de une technique dite de type erasure - un processus où le compilateur supprime tous les information relative aux paramètres de type et les arguments de type à l'intérieur d'une classe ou d' la méthode. Type d'effacement permet de Java les applications qui utilisent des médicaments génériques à maintenir la compatibilité binaire avec Les bibliothèques Java et applications ont été créés avant les génériques.

Cependant, avec les génériques en C# (.NET), il n'y a pas de type d'effacement par le compilateur, et le type de contrôles sont effectués au cours de l'exécution. Cela a ses avantages que le type d'information est conservée dans le code compilé.

De Wikipedia:

Ce choix de design est un levier pour fournir des fonctionnalités supplémentaires, telles comme ce qui permet la réflexion avec la préservation de types génériques, ainsi comme d'atténuer certaines des limitations de l'effacement (comme le fait d'être incapable de créer générique tableaux). Cette signifie aussi qu'il n'y a pas de performances à l'exécution des moulages et normalement cher la boxe conversions.

Plutôt que de dire ".NET génériques est mieux que Java génériques", l'on doit chercher dans la différence de l'approche à mettre en œuvre des génériques. En Java, il semble que la préservation de la compatibilité a été une priorité élevée, tandis que dans .NET (au moment de l'introduction à la version 2.0), la réalisation du plein bénéfice de l'utilisation de génériques a été une priorité plus élevée.

17voto

Strelok Points 18453

Comparaison détaillée ici, avec quelques liens.

12voto

IgorK Points 547

Également trouvé cette conversation avec Anders Hejlsberg qui peut être intéressant aussi. Mais +1 pour la réponse qui relie à de Jonathan Pryor blog post.

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