Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Jeśli rozpoczynasz nowe zadanie lub dołączasz do zespołu korzystającego z języka C#, ten artykuł pomaga szybko uzyskać produktywność. Wyróżnia to, co jest znane z języka Java i co nowego w języku C#.
Języki C# i Java mają wiele podobieństw. Po zapoznaniu się z językiem C#możesz zastosować większość wiedzy, jaką masz już z programowania w języku Java:
-
Podobna składnia: Języki Java i C# znajdują się w rodzinie języków C. To podobieństwo oznacza, że można już przeczytać i zrozumieć język C#. Istnieją pewne różnice, ale większość składni jest taka sama jak Java i C. Znane są nawiasy klamrowe i średniki. Instrukcje sterujące, takie jak
if,elseswitch, są takie same. Instrukcje iteracyjnefor,whileido...whilesą takie same. Te same słowa kluczowe dlaclassiinterfaceznajdują się w obu językach. Modyfikatory dostępu zpublicdoprivatesą takie same. Nawet wiele wbudowanych typów używa tych samych słów kluczowych:int,stringidouble. - Paradygmat zorientowany obiektowo: Języki Java i C# są językami obiektowymi. Koncepcje polimorfizmu, abstrakcji i hermetyzacji mają zastosowanie w obu językach. Obydwa dodały nowe konstrukcje, ale podstawowe funkcje są nadal istotne.
- Silnie typizowane: Języki Java i C# są silnie typizowane. Typ danych zmiennych można zadeklarować jawnie lub niejawnie. Kompilator wymusza bezpieczeństwo typu. Kompilator przechwytuje błędy związane z typem w kodzie przed uruchomieniem kodu.
- Międzyplatformowe: Język Java i C# są międzyplatformowe. Narzędzia programistyczne można uruchamiać na ulubionej platformie. Aplikacja może działać na wielu platformach. Twoja platforma programistyczna nie musi odpowiadać platformie docelowej.
-
Obsługa wyjątków: Zarówno java, jak i C# zgłaszają wyjątki wskazujące błędy. Oba korzystają z bloków
try-catch-finallydo obsługi wyjątków. Klasy wyjątków mają podobne nazwy i hierarchie dziedziczenia. Jedną z różnic jest to, że język C# nie ma pojęcia sprawdzonych wyjątków. Każda metoda może (teoretycznie) rzucić wyjątek. - Biblioteki standardowe: środowisko uruchomieniowe platformy .NET i biblioteka Java Standard Library (JSL) obsługują typowe zadania. Oba mają rozbudowane ekosystemy dla innych pakietów open source. W języku C# menedżer pakietów to NuGet. Jest to analogiczne do Maven.
-
Odzyskiwanie pamięci: oba języki wykorzystują automatyczne zarządzanie pamięcią za pośrednictwem odzyskiwania pamięci. Środowisko uruchomieniowe odzyskuje pamięć zajmowaną przez obiekty, które nie są referencjonowane. Jedną z różnic jest to, że język C# umożliwia tworzenie typów wartości jako typów
struct.
Składnia w skrócie
W poniższych przykładach pokazano kilka typowych wzorców obok siebie. Te porównania nie są wyczerpujące, ale zapewniają szybki wgląd w różnice składni.
Deklaracja zmiennej i wnioskowanie typu:
// Java
var name = "Hello";
final int count = 5;
// C#
var name = "Hello";
const int count = 5;
Interpolacja ciągów:
// Java
var message = "Hello, " + name + "! Count: " + count;
// C#
var message = $"Hello, {name}! Count: {count}";
Dowiedz się więcej: Interpolacja ciągów
Wyrażenia lambda:
// Java
list.stream().filter(x -> x > 5).collect(Collectors.toList());
// C#
var result = list.Where(x => x > 5).ToList();
Dowiedz się więcej: OMÓWIENIE LINQ
Obsługa wartości null:
// Java
String value = optional.orElse("default");
// C#
string value = input ?? "default";
Dowiedz się więcej: Typy referencyjne, które mogą mieć wartość null
Co jest znane
Możesz pracować wydajnie w języku C# niemal natychmiast ze względu na podobieństwa. W miarę postępu poznaj funkcje i idiomy w języku C#, które nie są dostępne w języku Java:
-
Dopasowywanie wzorca: Dopasowywanie wzorca umożliwia zwięzłe instrukcje warunkowe i wyrażenia na podstawie kształtu złożonych struktur danych. Instrukcja
issprawdza, czy zmienna "jest" zgodna z pewnym wzorcem. Wyrażenieswitchwzorcu zapewnia bogatą składnię do sprawdzania zmiennej i podejmowania decyzji na podstawie jej cech. - Interpolacja ciągów i surowe literały ciągów: Interpolacja ciągów umożliwia wstawianie obliczonych wyrażeń w ciągu zamiast używania identyfikatorów pozycyjnych. Nieprzetworzone literały ciągu umożliwiają zminimalizowanie sekwencji ucieczki w tekście.
-
Typy dopuszczające wartości null i inne niż null: język C# obsługuje typy wartości dopuszczających wartość null i typy referencyjne dopuszczające wartość null przez dołączenie sufiksu
?do typu. W przypadku typów dopuszczających wartość null kompilator wyświetli ostrzeżenie, jeśli nie sprawdzisznullprzed wyłuszczeniem wyrażenia. W przypadku typów nieprzyjmujących wartości null kompilator ostrzega, jeśli możesz przypisać wartośćnulldo tej zmiennej. Typy referencyjne nieakceptujące wartości null minimalizują błędy programowania, które zgłaszają błąd System.NullReferenceException. - Rozszerzenia: w języku C#można tworzyć elementy członkowskie rozszerzające klasę lub interfejs. Rozszerzenia zapewniają nowe zachowanie dla typu z biblioteki lub wszystkich typów, które implementują dany interfejs.
- LINQ: Zapytanie zintegrowane z językiem (LINQ) udostępnia wspólną składnię do wykonywania zapytań i przekształcania danych, niezależnie od jego magazynu.
- Funkcje lokalne: W języku C#można zagnieżdżać funkcje wewnątrz metod lub innych funkcji lokalnych. Funkcje lokalne zapewniają kolejną warstwę hermetyzacji.
Porada
Aby dowiedzieć się więcej na temat systemu typów języka C#—w tym struct vs. class, rekordów i interfejsów—zapoznaj się z przeglądem systemu typów w sekcji Podstawy.
W języku C# istnieją inne funkcje, które nie znajdują się w języku Java. Funkcje takie jak async i await modelują operacje asynchroniczne w składni sekwencyjnej. Instrukcja using automatycznie zwalnia zasoby niememorowe.
Istnieją również pewne podobne funkcje między językami C# i Java, które mają subtelne, ale ważne różnice:
-
Właściwości i indeksatory: Zarówno właściwości, jak i indeksatory (traktując klasę jak tablica lub słownik) mają obsługę języka. W języku Java są to konwencje nazewnictwa metod rozpoczynających się od
getiset. -
Rekordy: w języku C#rekordy mogą być typami
class(odwołanie) lubstruct(wartość). Rekordy języka C# mogą być niezmienne, ale nie muszą być niezmienne. - Krotki mają inną składnię w językach C# i Java.
- Atrybuty są podobne do adnotacji języka Java.
Na koniec istnieją funkcje języka Java, które nie są dostępne w języku C#:
- Sprawdzone wyjątki: w języku C#dowolna metoda może teoretycznie zgłosić wyjątek.
- Sprawdzona kowariancja tablic: w języku C# tablice nie są bezpiecznie kowariantne. Jeśli potrzebujesz kowariantnych struktur kolekcji, należy użyć ogólnych klas kolekcji i interfejsów.
Ogólnie rzecz biorąc, uczenie języka C# dla dewelopera doświadczonych w języku Java powinno być płynne. Język C# ma wystarczająco dużo znanych idiomów, aby być produktywnym, gdy nauczysz się nowych idiomów.
Dalsze kroki
- Przewodnik po języku C#: Ogólne omówienie wszystkich funkcji języka C#.
- Samouczki dla początkujących: nauka języka C# krok po kroku z interaktywnymi lekcjami.
- Co można utworzyć za pomocą języka C#: Eksploruj typy aplikacji, które można utworzyć za pomocą języka C#.
- Podstawy języka C#: Poznaj system typów, programowanie obiektowe i nie tylko.