AWWW-1st3.6-w06.tresc-1.1-Slajd15
Porównanie C# i Java
C# wykazuje na tyle znaczące podobieństwo do języka Java, że nie brak opinii, iż decyzja Microsoft o opracowaniu nowego języka była decyzją polityczną, a nie wynikającą z potrzeby zaoferowania nowych możliwości. Trzeba jednak uczciwie przyznać, że C# zaoferował możliwości niedostępne w języku Java w momencie jego pojawienia się. Przykładem jest pętla „foreach” od początku dostępna w C#, a uwzględniona w Javie dopiero od wersji 5.0. Nie sposób oprzeć się wrażeniu, że stało się pod wpływem sukcesu C#.
C# podobnie jak Java stanowi uproszczenie w stosunku do C++ rezygnując ze wskaźników, wzorców i dziedziczenia wielobazowego. Podobnie jak Java, wprowadza interfejsy (z możliwością implementowania wielu interfejsów), oraz kompilację do kodu pośredniego (MSIL). Kolejnym podobieństwem są przestrzenie nazw (ang. namespaces) dla klas, które pozwalają w C# na użycie tej samej nazwy klasy w różnych przestrzeniach nazw, pokrywając się funkcjonalnością z pakietami w Javie.
C# zachował jednak wiele możliwości C++, niedostępnych w Javie np. przeciążanie operatorów i jawne wskazywanie metod wirtualnych. Ponadto, w C# typy, które w Javie są wyróżnionymi typami prostymi (np. int, double) są obiektami, ale mimo to są domyślnie przekazywane przez wartość z możliwością przekazywania przez referencję. C# oferuje struktury, które mogą być przekazywane przez wartość.
Organizacja kodu w C# jest inna niż w Javie. C# nie ogranicza możliwości definiowania kilku klas w jednym pliku źródłowym. Nie ma w C# pakietów, odpowiadające im w zakresie rozstrzygania unikalności nazw przestrzenie nazw nie wprowadzają nowego kwalifikatora widzialności (jak pakiety Java). Nową formą organizacji kodu są tzw. assemblies, widzialność składowych w ramach których określa specyficzny dla C# kwalifikator „internal”.
Istnieje też wiele drobnych różnic składniowych między C# i Javą w obrębie analogicznych konstrukcji składniowych, np. w C# składnia dziedziczenia jest w postaci z C++.