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
class
w dowolnymstruct
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
- Wyrażenia lambda mogą mieć typ naturalny, gdzie kompilator może wywnioskować typ delegata z wyrażenia lambda lub grupy metod.
- Wyrażenia lambda mogą deklarować zwrotny typ, gdy kompilator nie jest w stanie go wywnioskować.
- Atrybuty można stosować do wyrażeń lambda.
- W języku C# 10 ciągi
const
można zainicjować przy użyciu interpolacji ciągów , jeśli wszystkie symbole zastępcze są ciągami stałymi. - W języku C# 10 można dodać modyfikator
podczas zastępowania w typie rekordu . - Ostrzeżenia dotyczące pewnego przypisania i analizy stanu zerowego są dokładniejsze.
- Zezwalaj zarówno na przypisanie, jak i deklarację w tej samej dekonstrukcji.
-
Zezwalaj na
AsyncMethodBuilder
atrybut w metodach - CallerArgumentExpression, atrybut
- Język C# 10 obsługuje nowy format dla pragma
#line
.
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
-
and
sprzężone 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. 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 bardziej ogólnych ograniczeń.
-
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 IEnumeratorIEnumerator 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.