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 brane pod uwagę podczas nadchodzących wydań, można znaleźć w repozytorium dotnet/roslyn w witrynie GitHub.

Ważne

Język C# opiera się na typach i metodach w tym, co 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 klasy Exception. Każda wersja może dodawać 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ą w tle dla tej zależności.

C# w wersji 11

Wydany w listopadzie 2022 r.

W języku C# 11 dodano następujące funkcje:

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 , takich jak wymagane elementy członkowskie i automatycznie domyślne struktury. Praca z ciągami jest łatwiejsza w przypadku literałów ciągu nieprzetworzonego, 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#:

Więcej funkcji było dostępnych w trybie podglądu . Aby można było korzystać z tych funkcji, należy ustawić wartość <LangVersion> na Preview w projekcie:

Język C# 10 kontynuuje pracę nad tematami usuwania ceremonii, oddzielania danych od algorytmów i poprawy 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 dyrektywy using 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 programy 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 osiągnięcia poprawy 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 ostatecznym wydaniem.

C# w wersji 9

Wydany w listopadzie 2020 r.

Język C# 9 został wydany przy użyciu platformy .NET 5. Jest to domyślna wersja języka dla dowolnego zestawu przeznaczonego dla wersji .NET 5. Zawiera ona 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 godzinie.

Instrukcje najwyższego poziomu oznaczają, że główny program jest prostszy do odczytania. Nie ma potrzeby ceremonii: przestrzeni nazw, Program klasy i static void Main() są niepotrzebne.

Wprowadzenie records zawiera zwięzłą składnię typów referencyjnych, które są zgodne z semantykami wartości w celu zapewnienia równości. Te typy służą do definiowania kontenerów danych, które zwykle definiują minimalne zachowanie. Init-only setters zapewniają możliwość mutacji nieniszczą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 typu zwracanego metody podstawowej.

Możliwości dopasowania wzorca zostały rozwinięte na kilka sposobów. Typy liczbowe obsługują teraz wzorce zakresu. Wzorce można łączyć przy użyciu andwzorców , ori not . Nawiasy można dodać w celu wyjaśnienia bardziej złożonych wzorców.

Inny zestaw funkcji obsługuje obliczenia o wysokiej wydajności w języku C#:

  • Typy nint i nuint 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.

Inny zestaw ulepszeń obsługuje scenariusze, w których generatory kodu dodają funkcjonalność:

  • 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ę.

Język C# 9 dodaje wiele innych małych funkcji, które zwiększają 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() dla foreach pętli
  • Wyrażenia lambda mogą deklarować parametry odrzucania
  • Atrybuty można zastosować do funkcji lokalnych

Wersja języka C# 9 kontynuuje pracę nad utrzymaniem nowoczesnego języka programowania ogólnego przeznaczenia w języku C#. Funkcje nadal obsługują nowoczesne obciążenia i typy aplikacji.

C# w wersji 8.0

Wydany we wrześniu 2019 r.

C# 8.0 to pierwsza główna wersja języka C#, która jest przeznaczona dla platformy .NET Core. Niektóre funkcje korzystają z nowych funkcji CLR, inne w przypadku typów 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 udostępnienia 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 języka 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żesz 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 dotyczące istniejących funkcji:

  • Można testować == i != za pomocą typów krotki.
  • Zmienne wyrażeń można używać w więcej lokalizacji.
  • Atrybuty można dołączyć do pola tworzenia kopii zapasowej właściwości zaimplementowanych automatycznie.
  • Rozpoznawanie metod, gdy argumenty różnią się in od siebie, zostały ulepszone.
  • Rozwiązanie przeciążenia ma teraz mniej niejednoznacznych przypadków.

Nowe opcje kompilatora to:

  • -publicsign aby włączyć podpisywanie zestawów za pomocą oprogramowania 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ęzyka:

  • 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.
  • Ponownie przypisz ref zmienne lokalne.
  • Zadeklaruj readonly struct typy, aby wskazać, że struktura jest niezmienna i powinna być przekazywana jako in parametr do jego 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ę.
  • Użyj modyfikatora metody ref readonly zwracanej przez metodę, aby wskazać, że metoda zwraca wartość według odwołania, 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
    • Nazwane argumenty mogą być po nim argumenty pozycyjne.
  • 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.
  • Wyrażenia warunkowe ref
    • Wynik wyrażenia warunkowego (?:) może być teraz odwołaniem.

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ęzykowej , trzy nowe funkcje językowe i nowe zachowanie kompilatora.

Nowe funkcje językowe w tej wersji to:

  • asyncMain Metoda
    • Punkt wejścia dla aplikacji może mieć async modyfikator.
  • 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.
  • Wnioskowane 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
    • W zmiennych, których typ jest parametrem typu ogólnego, można użyć wyrażeń dopasowania wzorca.

Na koniec kompilator ma dwie opcje -refout i -refonly kontroluje generowanie zestawu odwołania

C# w wersji 7.0

Wydany w marcu 2017 r.

Wydano wersję 7.0 języka C# w programie Visual Studio 2017. Ta wersja ma pewne ewolucyjne i fajne rzeczy w żyłach języka C# 6.0. Oto niektóre z nowych funkcji:

Inne funkcje to:

Wszystkie te funkcje oferują nowe możliwości dla deweloperów i możliwość pisania czystszego kodu niż kiedykolwiek wcześniej. Wyróżnianie polega na kondensacji deklaracji zmiennych do użycia ze out słowem kluczowym i przez zezwolenie 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 przenośności. 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 w programie 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:

  • Inicjatory indeksów
  • Oczekiwanie na bloki catch/finally
  • Wartości domyślne właściwości tylko do pobierania

Każda z tych funkcji jest interesująca we własnym zakresie. Ale jeśli spojrzysz na nie całkowicie, zobaczysz ciekawy wzorzec. W tej wersji język C# zaczął wyeliminować standardowy język, aby kod był bardziej czytelny i czytelny. Tak więc dla fanów czystego, prostego kodu ta wersja języka 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 poszły w kolejną przełomową koncepcję języka: async model 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 tony kodu odbicia. Ma wiele zastosowań w zadaniach diagnostyki i rejestrowania.

Ale async i await są prawdziwymi gwiazdami tej wersji. Kiedy te funkcje pojawiły się w 2012 roku, C# ponownie zmienił grę, piecząc asynchronię w języku jako uczestnik pierwszej klasy. Jeśli kiedykolwiek zajmowałeś się długotrwałymi operacjami i implementacją sieci Web wywołań zwrotnych, prawdopodobnie kochałeś tę funkcję języka.

C# w wersji 4.0

Wydany w kwietniu 2010 r.

Język C# w wersji 4.0, wydany z programem Visual Studio 2010, miałby trudny czas, aż do przełomowego stanu wersji 3.0. Ta wersja wprowadziła kilka interesujących nowych funkcji:

Osadzone typy międzyoperacjności złagodziły problem z wdrażaniem podczas tworzenia zestawów międzyoperacyjnych modelu COM dla aplikacji. Ogólna kowariancja i kontrawariancja zapewniają większą moc do używania typów ogólnych, ale są nieco akademickie i prawdopodobnie najbardziej doceniane przez autorów struktur i bibliotek. Parametry nazwane i opcjonalne pozwalają wyeliminować wiele przeciążeń metody i zapewnić wygodę. Ale żadna z tych cech nie zmienia się dokładnie w modelu.

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. Za pomocą dynamicznego słowa kluczowego można tworzyć konstrukcje podobne do języków typizowane dynamicznie, 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 możliwość wystąpienia błędów, ale także wielką moc w języku.

C# w wersji 3.0

Wydany w listopadzie 2007 r.

Język C# w wersji 3.0 przyszedł pod koniec 2007 r. wraz z programem Visual Studio 2008, chociaż pełna łódź funkcji językowych rzeczywiście będzie pochodzić z .NET Framework w wersji 3.5. Ta wersja oznaczała ważną zmianę w rozwoju języka C#. Język C# stał się naprawdę zrozumiałym językiem 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łączny. Wszystkie pasują do siebie strategicznie. Uważa się, że funkcja zabójcy wersji języka C# była wyrażeniem zapytania, znanym również jako zapytanie Language-Integrated (LINQ).

Bardziej zniuansowany widok analizuje drzewa wyrażeń, wyrażenia lambda i typy anonimowe jako podstawę, na której zbudowano LINQ. Jednak w obu przypadkach język C# 3.0 przedstawił rewolucyjną koncepcję. C# 3.0 zaczął ułożyć podstawy do przekształcenia języka C# w hybrydowy język Object-Oriented / 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ą 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 inteligentniejszy.

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:

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 delegatów

Chociaż język C# mógł zostać uruchomiony jako ogólny język Object-Oriented (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> pozwala na wykonywanie List<string> i List<int> wykonywanie bezpiecznych operacji na tych ciągach lub liczbach całkowitych podczas iteracji po nich. Używanie typów ogólnych jest lepsze niż tworzenie typu pochodzącego ListInt z lub ArrayList rzutowania z Object każdego działania.

Wprowadzono iteratory języka C# w wersji 2.0. Aby umieścić ją zwięźle, iteratory umożliwiają sprawdzenie wszystkich elementów w List (lub innych typach wyliczalnych) za pomocą foreach pętli. Iteratory jako najwyższej klasy część języka znacznie zwiększyły czytelność języka i zdolność ludzi do wnioskowania o kodzie.

A jednak język C# nadal bawił się trochę nadrobienia zaległości w języku Java. Środowisko Java wydało już wersje, które obejmowały typy ogólne i iteratory. Ale wkrótce zmieniłoby się to, gdy języki nadal ewoluowały.

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 drobnych ulepszeń języka. Najbardziej istotne jest to, że począwszy od tej wersji, kod wygenerowany w foreach pętli wywoływany Dispose w IEnumerator przypadku zaimplementowania IEnumeratorIDisposable.

C# w wersji 1.0

Wydany w styczniu 2002 r.

Po powrocie do środowiska C# w wersji 1.0 wydanej za pomocą programu Visual Studio .NET 2002 wyglądało bardzo podobnie do języka Java. W ramach deklarowanych celów projektowych dla ECMA, starał się być "prostym, nowoczesnym, zorientowanym na obiekty językiem ogólnego przeznaczenia". W tym czasie, patrząc jak w języku Java, oznaczało to, że osiągnął te wczesne cele projektowe.

Ale jeśli spojrzeć wstecz na C# 1.0 teraz, znajdziesz się trochę zawroty głowy. Brakowało wbudowanych funkcji asynchronicznych i niektórych zgrabnych funkcji wokół typów ogólnych, które otrzymujesz za pewnik. W rzeczywistości brakowało mu zupełnie typów ogólnych. A LINQ? Jeszcze niedostępne. 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.

Najważniejsze funkcje języka C# 1.0 obejmują:

Artykułpierwotnie opublikowany na blogu NDepend, dzięki uprzejmości Erik Dietrich i Patrick Smacchia.