C# i .NET nigdy nie wyprą Javy z jednego względu: są rozwijane przez MS i tylko na ich platformy. A takie monopolowe rozwiązania nie są zbyt lubiane przez konkurencję. Dlatego też powstał Mono, żeby dać możliwość użycia tego języka i części tej platformy pod innymi platformami.
Zdaniem zapaleńców .NETa projekt Mono kuleje i jest do niczego. Zdaniem programistów Mono wszelkie niedogodności da się ominąć. Mono nie jest pełną implementacją .NETa, brakuje wielu ficzerów z m.in. 4.0 i 3.5, przez co nie wszystkie programy napisane w tych wersjach działają pod Mono prawidłowo.
Z Javą jest inaczej: wydawana jest oryginalna (sun/oracle JRE i JDK) lub w pełni zgodna z oryginalną implementacją (openjdk) Javy (SE i EE) na wszystkie desktopowe platformy. Dodatkowo Java SE jest używana na Androidzie. ME jest używana na niemal wszystkich starszych i nowszych telefonach.
Wyjątkiem jest tu chyba iOS, na którym Apple chce zarobić: brak Javy, a programy trzeba pisać w Objective-C, a kompilator na iOSa wydany tylko na macosa. Więc żeby cokolwiek napisać na iOSa trzeba mieć maca.
Powstają programy dla użytkowników domowych w C# i .NET, ale czy nie lepiej napisać to w Javie, która jest na każdą platformę?
Napisałem mój program w Javie i na 1000 ściągnięć tylko 750 jest z Windowsa, na drugim Linux, na trzecim “nieznany” (być może BSD), na czwartym MacOS. Jak widać te popularne statystyki gdzie windows ma 94% niezbyt się przekładają na ilość użytkowników softu działającego pod każdym systemem.
Moim zdaniem Java jest bardziej uniwersalna, nawet w zastosowaniach biznesowych: nie ważne czy firma docelowa ma windowsy, linuksy, czy maci: odpali. A przeważnie zleceniodawcy nie obchodzi w jakiej technologii jest wykonana aplikacja, tylko że działa.
Jeżeli chcesz użyć C# i zachować zgodność z Mono, to używaj tylko Mono. Wtedy masz pewność że ten soft odpali zarówno pod Mono jak i .NETem