grazie!!!C#ha le proprietà e non una serie di getter & setter che oltretutto sei costretto a mettere ovunque perché anche se magari adesso non ti servono a nulla un giorno dovrai fare dei controlli, ad esempio (Oltre al fatto che fanno funzionare un sacco di cose basate sulle convenzioni).
In C# esiste una chiara distinzione fra value-type e reference-type. I tipi primitivi sono consistenti con il resto del linguaggio. Non esistono due tipi diversi per ad esempio int, qualsiasi cosa tu ci debba fare. (Ovvio che a livello implementativo viene usato lo stesso meccanismo di autoboxing/autounboxing).
C# fa parte di un bel ecosistema di linguaggi che possono interagire, grazie al CLR, senza tutti gli intoppi creati dalla cara vecchia JVM (a dir il vero questo punto sarebbe da ampliare riguardo ai linguaggi dinamici).
A livello pratico: se lavori in un contesto multipiattaforma C# è una scelta difficile (non impossibile, tuttavia), almeno per il momento. Java è una scelta più consolidata. Entrambi godono di un buon ecosistema di librerie (per quantità per lo meno). Entrambi hanno una buona documentazione.
Se dovessi scegliere se lavorare in Java o in C# come sole scelte (a livello di linguaggio) sceglierei C#, per quanto riguarda la consistenza interna del linguaggio. Ma la bellezza del linguaggio non è tutto nel mondo reale.
As an aside: ogni linguaggio può essere usato per il bene o per il male. In Haskell puoi scrivere il codice più oscuro mai visto, incomprensibile. Ciò non ti obbliga a farlo. Tutti sanno che ogni linguaggio ha le sue debolezze, ma aderendo a forti standard di qualità del codice si possono circumnavigare: non sottovalutare l'importanza delle convenzioni. Certo, se non ci fossero questi lati oscuri sarebbe meglio e perderemmo meno tempo, ma purtroppo tanti settori restano stanziati perché si hanno già delle basi di codice e il carico di lavoro (e il costo) sarebbero (a volte) proibitivi.
Spesso non si rendono conto del guadagno che avrebbero però.
Detto questo non sostengo molto le scelte del "mainstream". Non apprezzo particolarmente java, C++, Swift, ...
Preferisco altri linguaggi. Ma ciò non toglie che in ogni linguaggio puoi scrivere bene o male, anche in un linguaggio ottimo, più facilmente in uno pessimo.