Tout au long de ma carrière universitaire, j'ai utilisé de Java pour des projets de code jusqu'à ce que j'ai commencé à travailler qui est l'endroit où j'ai dû plonger dans le C# domaine. Si l' .Net-library est assez vaste, je ne peux pas aider mais sentir qu'il ya quelque chose qui manque dans C# par rapport à Java. Je voudrais savoir si Java est mieux que le C# ou vice versa par les experts. Que voulez-vous utiliser pour développer à la fois complexe et assez trivial applications? Quels sont les avantages et les inconvénients de l'utilisation de ces 2 technologies sur l'autre?
Réponses
Trop de publicités?Pendant des années, C# a été de rattraper leur retard avec Java. Qui s'est terminée avec C#/.Net 3.0/3.5 et maintenant c'est (principalement) dans l'autre sens. Qu'est-ce que C# et Java ne l'est pas?
- Fermetures;
- D'exécution génériques;
- Les génériques de types primitifs (les indices de référence de ce tri d'une liste d'un million d'ints vs un million de Entier les objets ont révélé un facteur de 3 amélioration);
- Les délégués;
- Les événements;
- LINQ;
- Les méthodes d'Extension;
- La première des propriétés de la classe;
- La surcharge d'opérateur;
- Les indexeurs;
- Les types anonymes;
- Des arbres d'Expression;
-
Using
blocs; - Pas vérifié exceptions. Hourra!
- Type décimal;
- Que de C# 4.0: l'
dynamic
type, qui est essentiellement le duck-typing.
Et en Java:
- FAÇON, manière de mieux les énumérations. C# enums sont tout entiers avec une bande peinte sur le côté. Java traiter les énumérations comme des objets avec le comportement est de loin supérieure (à mon humble avis);
- Je sais que cela va être controversée: les meilleures IDEs, en particulier dans le domaine de code refactoring où Visual Studio (sans Resharper) est encore à la traîne, loin derrière l'Ide, Eclipse et peut-être même Netbeans;
- Il fonctionne sur Linux. Mono nonobstant, Windows est de loin .Net plus gros talon d'achille (à mon humble avis);
- C'est gratuit. Java 6 + Glassfish + Eclipse + Linux vous coûte... rien. Maintenant, faites la même chose avec .Net + IIS + VS + R# + Windows Server...;
- A mon avis le Java 5 simultanéité utils emballage est toujours supérieure à toute sorte de simultanéité des outils que j'ai vu en C# à jour; et
- Beaucoup plus des projets open source, mais que le plomb est rapidement diminué.
Et malheureusement c'est tout ce que je peux penser pour les tiques dans la Java de la colonne.
Dans mon expérience, les langues, il y a très peu de choses en Java, mais pas en C# que je veux réellement. Les énumérations et statique importations viennent à l'esprit, mais c'est tout. Il y a beaucoup de choses que je ne pas comme en Java:
- Type de l'effacement dans les génériques
- Les classes internes (en opposition à la nested classes)
- L'appel de méthodes statiques "à travers" les références par exemple,
myThread.sleep(1000)
- Les classes internes anonymes (où un délégué presque toujours fait le travail)
- Checked exceptions
Il y a beaucoup de choses en C# qui je souhaite de Java:
- La langue définie par des propriétés (au lieu de simplement les conventions)
- Les délégués et fonctions connexes:
- Les événements
- Les expressions Lambda et les méthodes anonymes (gros!)
- Des arbres d'Expression
- Les méthodes d'Extension
- Les types anonymes
- Les méthodes sont non-virtuel par défaut
- Saner manipulation de readonly/final champs
- Implémentation d'interface explicite
- Itérateur blocs
- L'
using
déclaration - Valeur définie par l'utilisateur (tels que
DateTime
,decimal
,Guid
) et nullable types de valeur pour aller avec eux
Java 1.4 et C# 1.0 étaient très similaires. Maintenant, les deux langues (en cas d'écriture idiomatique) sont tout à fait différents dans de nombreux cas. Je m'ennuie de LINQ presque tous les jours quand je code en Java.
Les différences dans les génériques pour la plupart descendre en C#faveur de l'OMI, bien que l'approche de la variance de Java a certainement ses avantages. C# 4.0 mise en œuvre limitée de la variance, ce qui au moins permet - mais pas dans tous les lieux mêmes.
Je suis un développeur Java, et ont seulement lu sur .Net.
Mon avis: C# est une version plus moderne de Java (propriétés, les délégués, d'autres trucs). Certains de la plus stricte à Java, les 'fonctions' a donné une chute (checked exceptions).
C# est évolué beaucoup plus rapidement que Java, mais vous pourriez dire que c'est une mauvaise chose.
Java est un écosystème très riche. Chaque grand joueur IL a quelque chose en Java arène, à l'exception de Microsoft.
Dans le Javasphere vous avez beaucoup de choix: des IDEs, des cadres, des environnements d'exécution, les serveurs d'application. Le C# arena offre beaucoup moins de choix.
.Net est un meilleur choix pour les applications de bureau Windows, Java est mieux adapté pour les grandes applications de serveur.
Veuillez noter que ces sont très vastes généralisations.