Szkolenie
Ścieżka szkoleniowa
Użyj programu Visual Studio Code, aby tworzyć aplikacje konsolowe języka C#, które implementują tablice, pętle foreach i instrukcje if.
Ta przeglądarka nie jest już obsługiwana.
Przejdź na przeglądarkę Microsoft Edge, aby korzystać z najnowszych funkcji, aktualizacji zabezpieczeń i pomocy technicznej.
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. Aby dowiedzieć się, kiedy dana funkcja została dodana do języka, zapoznaj się z historii wersji języka C# pliku w repozytorium dotnet/csharplang
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.
wydany w listopadzie 2024 r.
Język C# 13 zawiera następujące nowe funkcjonalności:
params
kolekcji: modyfikator params
nie jest ograniczony do typów tablic. Teraz można używać params
z dowolnymi rozpoznawanymi typami kolekcji, w tym Span<T>
i typami interfejsów.lock
i semantyka: jeśli elementem docelowym instrukcji lock
jest System.Threading.Lock, kompilator generuje kod, aby użyć metody Lock.EnterScope(), aby wprowadzić zakres wyłączny.
ref struct
zwrócony z tej funkcji wspiera wzorzec Dispose()
, umożliwiając opuszczenie zakresu wyłącznego.\e
: możesz użyć \e
jako sekwencji ucieczki literału dla znaku ESCAPE
, czyli w Unicode U+001B
.^
, jest teraz dozwolony w wyrażeniu inicjatora obiektu.ref
ustawień lokalnych i unsafe
kontekstów w iteratorach i metodach asynchronicznych.ref struct
.ref struct
jako argumenty dla parametrów typu w typach ogólnych.partial
.Ponadto słowo kluczowe field
kontekstowe w celu uzyskania dostępu do pola kopii zapasowej wygenerowanego przez kompilator w automatycznie zaimplementowanej właściwości zostało wydane jako funkcja w wersji zapoznawczej.
Wydany w listopadzie 2023 r.
W języku C# 12 dodano następujące funkcje:
class
w dowolnym struct
typie...e
), w celu rozwinięcia dowolnej kolekcji.struct
.ref readonly
parametry - ref readonly
umożliwiają większą przejrzystość interfejsów API, które mogą używać ref
parametrów lub in
parametrów.using
dyrektywy aliasu do aliasu dowolnego typu, a nie tylko nazwanych typów.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ęć.
Wydany w listopadzie 2022 r.
W języku C# 11 dodano następujące funkcje:
Span<char>
wzorca dla stałej string
nameof
ref
pola i scoped ref
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.
Wydany w listopadzie 2021 r.
Język C# 10 dodaje następujące funkcje i ulepszenia języka C#:
global using
Dyrektywconst
można zainicjować przy użyciu interpolacji ciągów , jeśli wszystkie symbole zastępcze są ciągami stałymi.AsyncMethodBuilder
atrybut w metodach#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:
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ą.
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:
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:
and
sprzężone wymagają dopasowania obu wzorcówor
wymagają dopasowania obu wzorcównot
wzorce wymagają, aby wzorzec nie był zgodnyTe 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#:
nint
i nuint
modeluje typy liczb całkowitych o rozmiarze natywnym na docelowym procesorze CPU.localsinit
można pominąć, aby zapisać instrukcje.Inny zestaw ulepszeń obsługuje scenariusze, w których generatory kodu dodają funkcje:
Język C# 9 dodaje wiele innych małych funkcji zwiększających produktywność deweloperów, zarówno pisanie, jak i odczytywanie kodu:
new
docelowegostatic
funkcje anonimoweGetEnumerator()
dla foreach
pętliWersja 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.
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#:
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.
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:
ref
zmienne lokalne.stackalloc
tablicach.fixed
z dowolnym typem, który obsługuje wzorzec.Wprowadzono następujące ulepszenia istniejących funkcji:
==
i !=
za pomocą typów krotki.in
siebie, zostało ulepszone.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.Wydany w listopadzie 2017 r.
Język C# 7.2 dodał kilka małych funkcji językowych:
stackalloc
.fixed
instrukcji z dowolnym typem, który obsługuje wzorzec.ref
zmiennych lokalnych.readonly struct
typy, aby wskazać, że struktura jest niezmienna i powinna zostać przekazana jako in
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.ref struct
typy, aby wskazać, że typ struktury uzyskuje bezpośredni dostęp do pamięci zarządzanej i musi być zawsze przydzielany stos.private protected
modyfikator dostępu: private protected
dostępu umożliwia dostęp do klas pochodnych w tym samym zestawie.ref
: ?:
) może teraz być odwołaniem.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
async
modyfikator.default
wyrażenia literału
Na koniec kompilator ma dwie opcje -refout
i -refonly
kontroluje generowanie zestawów odwołań.
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:
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.
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:
Inne nowe funkcje to:
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.
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:
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.
Wydany w kwietniu 2010 r.
Język C# w wersji 4.0 wydany z programem Visual Studio 2010 wprowadził kilka interesujących nowych funkcji:
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.
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:
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.
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:
Inne funkcje języka C# 2.0 dodały możliwości do istniejących funkcji:
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.
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.
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:
Artykułpierwotnie opublikowany na blogu NDepend, dzięki uprzejmości Erik Dietrich i Patrick Smacchia.
Opinia o produkcie .NET
.NET to projekt typu open source. Wybierz link, aby przekazać opinię:
Szkolenie
Ścieżka szkoleniowa
Użyj programu Visual Studio Code, aby tworzyć aplikacje konsolowe języka C#, które implementują tablice, pętle foreach i instrukcje if.