Historia języka C#
Ten artykuł zawiera historię każdej głównej wersji języka C#. Zespół języka C# kontynuuje wprowadzanie innowacji i dodawanie nowych funkcji. Szczegółowy stan funkcji języka, w tym funkcje uważane za nadchodzące wydania, można znaleźć w repozytorium dotnet/roslyn w witrynie GitHub.
Ważne
Język C# opiera się na typach i metodach, które specyfikacja języka C# definiuje jako standardową bibliotekę dla niektórych funkcji. Platforma .NET dostarcza te typy i metody w wielu pakietach. Przykładem jest przetwarzanie wyjątków. Każda throw
instrukcja lub wyrażenie jest sprawdzane, aby upewnić się, że zgłaszany obiekt pochodzi z Exceptionelementu . Podobnie każdy catch
element jest sprawdzany, aby upewnić się, że przechwycony typ pochodzi z Exceptionklasy . Każda wersja może dodać nowe wymagania. Aby korzystać z najnowszych funkcji językowych w starszych środowiskach, może być konieczne zainstalowanie określonych bibliotek. Te zależności są udokumentowane na stronie dla każdej konkretnej wersji. Możesz dowiedzieć się więcej o relacjach między językiem i biblioteką na tle tej zależności.
C# w wersji 12
Wydany w listopadzie 2023 r.
W języku C# 12 dodano następujące funkcje:
- Konstruktory podstawowe — konstruktory podstawowe można tworzyć w dowolnym typie lub
struct
w dowolnymclass
typie. - Wyrażenia kolekcji — nowa składnia umożliwiająca określenie wyrażeń kolekcji, w tym elementu spread (
..e
), w celu rozwinięcia dowolnej kolekcji. - Tablice wbudowane — tablice wbudowane umożliwiają tworzenie tablicy o stałym rozmiarze w typie
struct
. - Parametry opcjonalne w wyrażeniach lambda — można zdefiniować wartości domyślne parametrów w wyrażeniach lambda.
ref readonly
parametry -ref readonly
umożliwiają większą przejrzystość interfejsów API, które mogą używaćref
parametrów lubin
parametrów.- Alias dowolnego typu — możesz użyć
using
dyrektywy aliasu do aliasu dowolnego typu, a nie tylko nazwanych typów. - Atrybut eksperymentalny — wskazuje funkcję eksperymentalną.
I, Interceptors - został wydany jako funkcja w wersji zapoznawczej.
Ogólnie rzecz biorąc, język C# 12 udostępnia nowe funkcje, które ułatwiają wydajniejsze pisanie kodu w języku C#. Składnia, o której już wiesz, jest dostępna w więcej miejsc. Inna składnia umożliwia spójność powiązanych pojęć.
C# w wersji 11
Wydany w listopadzie 2022 r.
W języku C# 11 dodano następujące funkcje:
- Nieprzetworzone literały ciągu
- Ogólna obsługa matematyczna
- Atrybuty ogólne
- Literały ciągu UTF-8
- Nowe linie w wyrażeniach interpolacji ciągów
- Wzorce listy
- Typy lokalne plików
- Wymagane elementy członkowskie
- Automatycznie domyślne struktury
- Dopasowanie
Span<char>
wzorca dla stałejstring
- Zakres rozszerzony
nameof
- Numeryczny intPtr
ref
pola iscoped ref
- Ulepszona konwersja grupy metod na delegowanie
- Fala ostrzegawcza 7
Język C# 11 wprowadza ogólne funkcje matematyczne i kilka funkcji, które obsługują ten cel. Algorytmy liczbowe można pisać raz dla wszystkich typów liczbowych. Istnieje więcej funkcji ułatwiania pracy z typami struct
, takimi jak wymagane elementy członkowskie i automatyczne struktury domyślne. Praca z ciągami jest łatwiejsza w przypadku literałów ciągów nieprzetworzonych, nowego wiersza w interpolacjach ciągów i literałów ciągów UTF-8. Funkcje, takie jak typy lokalne plików, umożliwiają prostsze generowanie źródeł. Na koniec wzorce list dodają większą obsługę dopasowywania wzorców.
C# w wersji 10
Wydany w listopadzie 2021 r.
Język C# 10 dodaje następujące funkcje i ulepszenia języka C#:
- Struktury rekordów
- Ulepszenia typów struktur
- Programy obsługi ciągów interpolowanych
global using
Dyrektyw- Deklaracja przestrzeni nazw o zakresie plików
- Rozszerzone wzorce właściwości
- Ulepszenia w wyrażeniach lambda
- Zezwalaj na
const
ciągi interpolowane - Typy rekordów mogą zapieczętować
ToString()
- Ulepszone określone przypisanie
- Zezwalaj zarówno na przypisanie, jak i deklarację w tej samej dekonstrukcji
- Zezwalaj na
AsyncMethodBuilder
atrybut w metodach - CallerArgumentExpression, atrybut
- Ulepszona
#line
pragma
Więcej funkcji było dostępnych w trybie podglądu . Aby można było używać tych funkcji, należy ustawić wartość <LangVersion>
na Preview
wartość w projekcie:
- Atrybuty ogólne w dalszej części tego artykułu.
- statyczne abstrakcyjne elementy członkowskie w interfejsach.
Język C# 10 kontynuuje pracę nad motywami usuwania ceremonii, oddzielania danych od algorytmów i lepszej wydajności środowiska uruchomieniowego platformy .NET.
Wiele funkcji oznacza, że wpiszesz mniej kodu, aby wyrazić te same pojęcia. Struktury rekordów syntetyzują wiele z tych samych metod, które wykonują klasy rekordów . Obsługa struktur i typów anonimowych za pomocą wyrażeń. Globalne używanie dyrektyw i deklaracje przestrzeni nazw o zakresie plików oznaczają, że wyraźniej wyrażasz zależności i organizację przestrzeni nazw. Ulepszenia lambda ułatwiają deklarowanie wyrażeń lambda, w których są używane. Nowe wzorce właściwości i ulepszenia dekonstrukcji tworzą bardziej zwięzły kod.
Nowe procedury obsługi i AsyncMethodBuilder
zachowanie ciągów interpolowanych mogą poprawić wydajność. Te funkcje językowe zostały zastosowane w środowisku uruchomieniowym platformy .NET w celu uzyskania ulepszeń wydajności na platformie .NET 6.
Język C# 10 oznacza również większą zmianę na roczną kadencję wydań platformy .NET. Ponieważ nie każda funkcja może zostać ukończona w rocznym przedziale czasu, możesz wypróbować kilka funkcji "w wersji zapoznawczej" w języku C# 10. Można używać zarówno atrybutów ogólnych, jak i statycznych elementów abstrakcyjnych w interfejsach , ale te funkcje w wersji zapoznawczej mogą ulec zmianie przed ich ostateczną wersją.
C# w wersji 9
Wydany w listopadzie 2020 r.
Język C# 9 został wydany za pomocą platformy .NET 5. Jest to domyślna wersja języka dla każdego zestawu przeznaczonego dla wersji .NET 5. Zawiera następujące nowe i ulepszone funkcje:
- Rekordy
- Tylko inicjatory
- Instrukcje najwyższego poziomu
- Ulepszenia dopasowywania wzorców: wzorce relacyjne i wzorce logiczne
- Wydajność i współdziałanie
- Dopasuj i zakończ funkcje
Język C# 9 kontynuuje trzy motywy z poprzednich wersji: usuwanie ceremonii, oddzielanie danych od algorytmów i dostarczanie większej liczby wzorców w większej ilości miejsc.
Instrukcje najwyższego poziomu oznaczają, że główny program jest prostszy do odczytania. Ceremonia jest mniejsza: przestrzeń nazw, Program
klasa i static void Main()
wszystkie niepotrzebne.
Wprowadzenie records
zapewnia zwięzłą składnię typów referencyjnych, które są zgodne z semantykami wartości na potrzeby równości. Te typy służą do definiowania kontenerów danych, które zwykle definiują minimalne zachowanie. Inicjatory init-only zapewniają możliwość mutacji niezniszczających (with
wyrażeń) w rekordach. Język C# 9 dodaje również kowariantne typy zwracane, aby rekordy pochodne mogły zastąpić metody wirtualne i zwrócić typ pochodzący z zwracanego typu metody bazowej.
Możliwości dopasowywania wzorca są rozszerzane na kilka sposobów. Typy liczbowe obsługują teraz wzorce zakresu. Wzorce można łączyć przy użyciu and
wzorców , or
i not
. Nawiasy można dodać, aby wyjaśnić bardziej złożone wzorce:
Język C# 9 zawiera nowe ulepszenia dopasowywania wzorców:
- Wzorce typów pasują do obiektu zgodnego z określonym typem
- Wzorce nawiasów wymuszają lub podkreślają pierwszeństwo kombinacji wzorców
- Wzorce sprzężone
and
wymagają dopasowania obu wzorców - Wzorce rozłączne
or
wymagają dopasowania obu wzorców - Negowane
not
wzorce wymagają, aby wzorzec nie był zgodny - Wzorce relacyjne wymagają, aby dane wejściowe stały się mniejsze niż, większe niż, mniejsze lub równe lub większe niż lub równe danej stałej
Te wzorce wzbogacają składnię wzorców. Rozważ następujące przykłady:
public static bool IsLetter(this char c) =>
c is >= 'a' and <= 'z' or >= 'A' and <= 'Z';
W przypadku opcjonalnych nawiasów, aby wyjaśnić, że and
ma wyższy priorytet niż or
:
public static bool IsLetterOrSeparator(this char c) =>
c is (>= 'a' and <= 'z') or (>= 'A' and <= 'Z') or '.' or ',';
Jedną z najczęstszych zastosowań jest nowa składnia sprawdzania wartości null:
if (e is not null)
{
// ...
}
Dowolny z tych wzorców może być używany w dowolnym kontekście, w którym dozwolone są wzorce: is
wyrażenia wzorca, switch
wyrażenia, wzorce zagnieżdżone i wzorzec switch
etykiety instrukcji case
.
Inny zestaw funkcji obsługuje obliczenia o wysokiej wydajności w języku C#:
- Typy
nint
inuint
modeluje typy liczb całkowitych o rozmiarze natywnym na docelowym procesorze CPU. - Wskaźniki funkcji zapewniają funkcję przypominającą delegata, unikając alokacji niezbędnych do utworzenia obiektu delegata.
- Instrukcje
localsinit
można pominąć, aby zapisać instrukcje.
Wydajność i współdziałanie
Inny zestaw ulepszeń obsługuje scenariusze, w których generatory kodu dodają funkcje:
- Inicjatory modułów to metody wywoływane przez środowisko uruchomieniowe podczas ładowania zestawu.
- Metody częściowe obsługują nowe modyfikatory dostępu i niepuste typy zwracane. W takich przypadkach należy podać implementację.
Dopasuj i zakończ funkcje
Język C# 9 dodaje wiele innych małych funkcji zwiększających produktywność deweloperów, zarówno pisanie, jak i odczytywanie kodu:
- Wyrażenia typu
new
docelowego static
funkcje anonimowe- Wyrażenia warunkowe typu docelowego
- Obsługa rozszerzeń
GetEnumerator()
dlaforeach
pętli - Wyrażenia lambda mogą deklarować parametry odrzucenia
- Atrybuty można stosować do funkcji lokalnych
Wersja języka C# 9 kontynuuje pracę, aby język C# był nowoczesnym językiem programowania ogólnego przeznaczenia. Funkcje nadal obsługują nowoczesne obciążenia i typy aplikacji.
C# w wersji 8.0
Wydany we wrześniu 2019 r.
C# 8.0 jest pierwszą główną wersją języka C#, która jest przeznaczona dla platformy .NET Core. Niektóre funkcje korzystają z nowych funkcji środowiska Uruchomieniowego języka wspólnego (CLR), a inne na typach bibliotek dodanych tylko na platformie .NET Core. Język C# 8.0 dodaje następujące funkcje i ulepszenia języka C#:
- Elementy członkowskie tylko do odczytu
- Domyślne metody interfejsu
- Ulepszenia dopasowywania wzorców:
- Wyrażenia przełącznika
- Wzorce właściwości
- Wzorce krotki
- Wzorce pozycyjne
- Używanie deklaracji
- Statyczne funkcje lokalne
- Jednorazowe struktury refruktury
- Typy referencyjne dopuszczające wartość null
- Strumienie asynchroniczne
- Indeksy i zakresy
- Przypisanie łączenia wartości null
- Typy skonstruowane niezarządzane
- Stackalloc w wyrażeniach zagnieżdżonych
- Ulepszenie ciągów dosłownych interpolowanych
Domyślne elementy członkowskie interfejsu wymagają ulepszeń w środowisku CLR. Te funkcje zostały dodane w środowisku CLR dla platformy .NET Core 3.0. Zakresy i indeksy oraz strumienie asynchroniczne wymagają nowych typów w bibliotekach platformy .NET Core 3.0. Typy odwołań dopuszczających wartość null, zaimplementowane w kompilatorze, są znacznie bardziej przydatne, gdy biblioteki są oznaczone adnotacjami w celu zapewnienia informacji semantycznych dotyczących stanu null argumentów i zwracanych wartości. Te adnotacje są dodawane w bibliotekach platformy .NET Core.
C# w wersji 7.3
Wydany w maju 2018 r.
Istnieją dwa główne motywy wersji C# 7.3. Jeden z motywów zawiera funkcje, które umożliwiają bezpieczne wykonywanie kodu jako niebezpiecznego kodu. Drugi motyw zawiera przyrostowe ulepszenia istniejących funkcji. W tej wersji dodano również nowe opcje kompilatora.
Następujące nowe funkcje obsługują motyw lepszej wydajności bezpiecznego kodu:
- Dostęp do stałych pól można uzyskać bez przypinania.
- Można ponownie przypisać
ref
zmienne lokalne. - Inicjatory można używać w
stackalloc
tablicach. - Instrukcje można używać
fixed
z dowolnym typem, który obsługuje wzorzec. - Możesz użyć bardziej ogólnych ograniczeń.
Wprowadzono następujące ulepszenia istniejących funkcji:
- Można testować
==
i!=
za pomocą typów krotki. - Zmienne wyrażeń można używać w większej ilości lokalizacji.
- Atrybuty można dołączyć do pola zapasowego automatycznie zaimplementowanych właściwości.
- Rozpoznawanie metod, gdy argumenty różnią się od
in
siebie, zostało ulepszone. - Rozwiązanie przeciążenia ma teraz mniej niejednoznacznych przypadków.
Nowe opcje kompilatora to:
-publicsign
aby włączyć podpisywanie zestawów oprogramowania typu open source (OSS).-pathmap
w celu zapewnienia mapowania katalogów źródłowych.
C# w wersji 7.2
Wydany w listopadzie 2017 r.
Język C# 7.2 dodał kilka małych funkcji językowych:
- Inicjatory tablic
stackalloc
. - Użyj
fixed
instrukcji z dowolnym typem, który obsługuje wzorzec. - Uzyskaj dostęp do stałych pól bez przypinania.
- Ponowne przypisywanie
ref
zmiennych lokalnych. - Zadeklaruj
readonly struct
typy, aby wskazać, że struktura jest niezmienna i powinna zostać przekazana jakoin
parametr do metod składowych. in
Dodaj modyfikator parametrów, aby określić, że argument jest przekazywany przez odwołanie, ale nie jest modyfikowany przez wywołaną metodę.ref readonly
Użyj modyfikatora metody zwracanej przez metodę, aby wskazać, że metoda zwraca wartość przez odwołanie, ale nie zezwala na zapisy do tego obiektu.- Zadeklaruj
ref struct
typy, aby wskazać, że typ struktury uzyskuje bezpośredni dostęp do pamięci zarządzanej i musi być zawsze przydzielany stos. - Użyj dodatkowych ograniczeń ogólnych.
- Argumenty nazwane inne niż końcowe:
- Argumenty pozycyjne mogą być zgodne z nazwami argumentami.
- Wiodące podkreślenia w literałach liczbowych:
- Literały liczbowe mogą teraz mieć wiodące podkreślenia przed wszelkimi drukowanymi cyframi.
private protected
modyfikator dostępu:- Modyfikator
private protected
dostępu umożliwia dostęp do klas pochodnych w tym samym zestawie.
- Modyfikator
- Wyrażenia warunkowe
ref
:- Wynik wyrażenia warunkowego (
?:
) może teraz być odwołaniem.
- Wynik wyrażenia warunkowego (
C# w wersji 7.1
Wydany w sierpniu 2017 r.
Język C# rozpoczął wydawanie wydań punktów za pomocą języka C# 7.1. Ta wersja dodała element konfiguracji wyboru wersji języka, trzy nowe funkcje językowe i nowe zachowanie kompilatora.
Nowe funkcje językowe w tej wersji to:
async
Main
metoda- Punkt wejścia dla aplikacji może mieć
async
modyfikator.
- Punkt wejścia dla aplikacji może mieć
default
wyrażenia literału- Można użyć domyślnych wyrażeń literałów w wyrażeniach wartości domyślnych, gdy typ docelowy może być wywnioskowany.
- Wywnioskowane nazwy elementów krotki
- Nazwy elementów krotki można wywnioskować z inicjalizacji krotki w wielu przypadkach.
- Dopasowywanie wzorca dla parametrów typu ogólnego
- Można użyć wyrażeń dopasowania wzorca w zmiennych, których typ jest parametrem typu ogólnego.
Na koniec kompilator ma dwie opcje -refout
i -refonly
kontroluje generowanie zestawów odwołań.
C# w wersji 7.0
Wydany w marcu 2017 r.
Język C# w wersji 7.0 został wydany w programie Visual Studio 2017. Ta wersja ma pewne ewolucyjne i fajne rzeczy w żyłach języka C# 6.0. Oto niektóre nowe funkcje:
- Zmienne wychodzące
- Krotki i dekonstrukcja
- Dopasowanie do wzorca
- Funkcje lokalne
- Rozwinięte składowe wyrażeń
- Adresy lokalne ref
- Zwroty ref
Dostępne są inne funkcje:
Wszystkie te funkcje oferują nowe funkcje dla deweloperów i możliwość pisania czystszego kodu niż kiedykolwiek. Wyróżnienie kondensuje deklarację zmiennych do użycia ze out
słowem kluczowym i zezwalając na wiele zwracanych wartości za pośrednictwem krotki. Platforma .NET Core jest teraz przeznaczona dla dowolnego systemu operacyjnego i ma oczy mocno w chmurze i na przenośność. Te nowe możliwości z pewnością zajmują myśli i czas projektantów języków, oprócz wymyślić nowe funkcje.
C# w wersji 6.0
Wydany w lipcu 2015 r.
Wersja 6.0 wydana z programem Visual Studio 2015 wydała wiele mniejszych funkcji, które sprawiły, że programowanie w języku C# było bardziej wydajne. Oto niektóre z nich:
- Importy statyczne
- Filtry wyjątków
- Inicjatory autowłaściwych właściwości
- Składowe wyrażeń
- Propagacja wartości null
- Interpolacja ciągów
- nameof, operator
Inne nowe funkcje to:
- Inicjatory indeksów
- Oczekiwanie na bloki catch/finally
- Wartości domyślne właściwości tylko do pobierania
Jeśli przyjrzysz się tym funkcjom razem, zobaczysz interesujący wzorzec. W tej wersji język C# zaczął wyeliminować standardowy język, aby kod był bardziej czytelny i czytelny. Więc dla fanów czystego, prostego kodu ta wersja językowa była ogromną wygraną.
Zrobili jedną inną rzecz wraz z tą wersją, choć nie jest to tradycyjna funkcja języka sama w sobie. Wydali Roslyn kompilator jako usługę. Kompilator języka C# jest teraz napisany w języku C#, a kompilator można używać w ramach wysiłków programistycznych.
C# w wersji 5.0
Wydany w sierpniu 2012 r.
Język C# w wersji 5.0 wydany z programem Visual Studio 2012 był ukierunkowaną wersją języka. Prawie wszystkie wysiłki w tej wersji przeszły do innej przełomowej koncepcji języka: async
modelu i await
do programowania asynchronicznego. Oto główna lista funkcji:
- Asynchroniczne elementy członkowskie
- Atrybuty informacji o obiekcie wywołującym
- Projekt kodu: atrybuty informacji o obiekcie wywołującym w języku C# 5.0
Atrybut informacji o obiekcie wywołującym umożliwia łatwe pobieranie informacji o kontekście, w którym działasz, bez uciekania się do mnóstwa kodu odbicia kotłowego. Ma wiele zastosowań w zadaniach diagnostycznych i rejestrowania.
Ale async
i await
są prawdziwymi gwiazdami tej wersji. Kiedy te funkcje wyszły w 2012 roku, język C# ponownie zmienił grę, piecząc asynchronię w język jako uczestnik pierwszej klasy.
C# w wersji 4.0
Wydany w kwietniu 2010 r.
Język C# w wersji 4.0 wydany z programem Visual Studio 2010 wprowadził kilka interesujących nowych funkcji:
- Powiązanie dynamiczne
- Argumenty nazwane/opcjonalne
- Kowariantny i kontrawariant
- Osadzone typy międzyoperańcowe
Osadzone typy międzyoperajności złagodziły problem z wdrażaniem tworzenia zestawów międzyoperacyjnych MODELU COM dla aplikacji. Ogólna kowariancja i kontrawariancja zapewniają większą moc do korzystania z typów ogólnych, ale są one nieco akademickie i prawdopodobnie najbardziej doceniane przez autorów struktur i bibliotek. Parametry nazwane i opcjonalne pozwalają wyeliminować wiele przeciążeń metod i zapewnić wygodę. Ale żadna z tych cech nie jest dokładnie zmiana paradygmatu.
Główną funkcją było wprowadzenie słowa kluczowego dynamic
. Słowo dynamic
kluczowe wprowadzone w języku C# w wersji 4.0 umożliwia zastępowanie kompilatora podczas wpisywania w czasie kompilacji. Używając dynamicznego słowa kluczowego, można tworzyć konstrukcje podobne do dynamicznie typiowanych języków, takich jak JavaScript. Możesz utworzyć element dynamic x = "a string"
, a następnie dodać do niego sześć, pozostawiając go do środowiska uruchomieniowego, aby ustalić, co powinno się wydarzyć dalej.
Powiązanie dynamiczne daje potencjał błędów, ale także dużą moc w języku.
C# w wersji 3.0
Wydany w listopadzie 2007 r.
Język C# w wersji 3.0 pojawił się pod koniec 2007 r. wraz z programem Visual Studio 2008, chociaż pełna łódź funkcji językowych będzie rzeczywiście zawierać program .NET Framework w wersji 3.5. Ta wersja oznaczała ważną zmianę wzrostu języka C#. Ustanowiono język C# jako naprawdę groźny język programowania. Przyjrzyjmy się niektórym głównym funkcjom w tej wersji:
- Właściwości zaimplementowane automatycznie
- Typy anonimowe
- Wyrażenia zapytań
- Wyrażenia lambda
- Drzewa wyrażeń
- Metody rozszerzeń
- Niejawnie wpisane zmienne lokalne
- Metody częściowe
- Inicjatory obiektów i kolekcji
Z perspektywy czasu wiele z tych cech wydaje się zarówno nieuniknione, jak i nierozłączelne. Wszystkie pasują do siebie strategicznie. Ta funkcja zabójcy wersji języka C# była wyrażeniem zapytania, znanym również jako Zapytanie zintegrowane z językiem (LINQ).
Bardziej zniuansowany widok analizuje drzewa wyrażeń, wyrażenia lambda i typy anonimowe jako podstawę, na której jest skonstruowany LINQ. Jednak w obu przypadkach język C# 3.0 przedstawił rewolucyjne pojęcie. Język C# 3.0 zaczął ułożyć podstawy przekształcania języka C# w hybrydowy język zorientowany na obiekt /funkcjonalny.
W szczególności można teraz pisać zapytania deklaratywne w stylu SQL, aby wykonywać między innymi operacje na kolekcjach. Zamiast pisać pętlę for
, aby obliczyć średnią z listy liczb całkowitych, teraz można to zrobić tak samo jak list.Average()
. Kombinacja wyrażeń zapytań i metod rozszerzeń sprawiła, że lista liczb całkowitych jest o wiele mądrzejsza.
C# w wersji 2.0
Wydany w listopadzie 2005 r.
Przyjrzyjmy się niektórym głównym funkcjom języka C# 2.0 wydanym w 2005 r. wraz z programem Visual Studio 2005:
- Typy ogólne
- Typy częściowe
- Metody anonimowe
- Typy wartości dopuszczalnych wartości null
- Iteratory
- Kowariancja i kontrawariancja
Inne funkcje języka C# 2.0 dodały możliwości do istniejących funkcji:
- Uzyskiwanie/ustawianie oddzielnych ułatwień dostępu
- Konwersje grup metod (delegatów)
- Klasy statyczne
- Wnioskowanie delegowania
Podczas gdy język C# rozpoczął się jako ogólny język obiektowo-zorientowany (OO), język C# w wersji 2.0 zmienił się w pośpiechu. W przypadku typów ogólnych, typy i metody mogą działać na dowolnym typie, zachowując bezpieczeństwo typów. Na przykład posiadanie elementu List<T> umożliwia List<string>
lub List<int>
i wykonywanie bezpiecznych operacji na tych ciągach lub liczbach całkowitych podczas wykonywania iteracji po nich. Używanie typów ogólnych jest lepsze niż tworzenie ListInt
typu pochodzącego z ArrayList
lub rzutowania z Object
każdego działania.
Wprowadzono iteratory w języku C# w wersji 2.0. Aby umieścić ją zwięźle, iteratory pozwalają zbadać wszystkie elementy w List
(lub innych typach wyliczanych) za pomocą foreach
pętli. Iteratory jako pierwszoklasowa część języka znacznie zwiększyły czytelność języka i zdolność ludzi do rozumowania o kodzie.
C# w wersji 1.2
Wydany w kwietniu 2003 r.
Język C# w wersji 1.2 dostarczany z programem Visual Studio .NET 2003. Zawierał on kilka małych ulepszeń języka. Najbardziej godne uwagi jest to, że począwszy od tej wersji, kod wygenerowany w foreach
pętli wywoływanej Dispose podczas IEnumerator IEnumerator implementacji IDisposable.
C# w wersji 1.0
Wydanie: styczeń 2002 r.
Po powrocie i spojrzeniu język C# w wersji 1.0 wydany z programem Visual Studio .NET 2002 wyglądał podobnie do języka Java. W ramach deklarowanych celów projektowych dla ECMA, starał się być "prostym, nowoczesnym, uniwersalnym językiem obiektowym". W tym czasie, patrząc jak w języku Java, oznaczało to osiągnięcie tych wczesnych celów projektowych.
Ale jeśli spojrzeć wstecz na C# 1.0 teraz, znajdziesz się trochę zawroty głowy. Brakowało wbudowanych funkcji asynchronicznych i niektórych funkcji slick wokół typów ogólnych, które należy wziąć za pewnik. W rzeczywistości brakowało mu w ogóle typów ogólnych. I LINQ? Jeszcze nie jest dostępny. Te dodatki zajęłyby kilka lat, aby wyjść.
Język C# w wersji 1.0 wyglądał na pozbawiony funkcji w porównaniu z dzisiejszymi wersjami. Możesz napisać pełny kod. Ale jednak musisz zacząć gdzieś. Język C# w wersji 1.0 był realną alternatywą dla języka Java na platformie Windows.
Główne funkcje języka C# 1.0:
- Klasy
- Struktury
- Interfejsy
- Wydarzenia
- Właściwości
- Delegaci
- Operatory i wyrażenia
- Zestawienia
- Atrybuty
Artykuł pierwotnie opublikowany na blogu NDepend, dzięki uprzejmości Erik Dietrich i Patrick Smacchia.