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:
- 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 w stałejstring
- Zakres rozszerzony
nameof
- Liczbowy kod intPtr
ref
pola iscoped ref
- Ulepszona konwersja grupy metod na delegata
- 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
, 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#:
- Struktury rekordów
- Ulepszenia typów struktur
- Programy obsługi ciągów interpolowanych
global using
Dyrektyw- Deklaracja przestrzeni nazw o zakresie plików
- Wzorce właściwości rozszerzonych
- Ulepszenia wyrażeń lambda
- Zezwalaj na
const
ciągi interpolowane - Typy rekordów mogą zapieczętować
ToString()
- Ulepszone przypisanie określone
- 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 korzystać z tych funkcji, należy ustawić wartość <LangVersion>
na Preview
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 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:
- Rekordy
- Metody ustawiające tylko do inicjowania
- Instrukcje najwyższego poziomu
- Ulepszenia dopasowania wzorców
- Wydajność i współdziałanie
- Dopasuj i zakończ funkcje
- Obsługa generatorów kodu
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 and
wzorców , or
i 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
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.
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()
dlaforeach
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#:
- Członkowie readonly
- Domyślne metody interfejsu
- Ulepszenia dopasowywania wzorców:
- Przełączanie wyrażeń
- Wzorce właściwości
- Wzorce krotki
- Wzorce pozycyjne
- Używanie deklaracji
- Statyczne funkcje lokalne
- Jednorazowe struktury reffekcji
- Typy referencyjne dopuszczające wartość null
- Asynchroniczne strumienie
- Indeksy i zakresy
- Przypisanie łączenia wartości null
- Typy konstruowane niezarządzane
- Stackalloc w wyrażeniach zagnieżdżonych
- Ulepszenie ciągów interpolowanych dosłownych
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 jakoin
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.
- Modyfikator
- Wyrażenia warunkowe
ref
- Wynik wyrażenia warunkowego (
?:
) może być teraz 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ęzykowej , 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.
- 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:
- Zmienne wychodzące
- Krotki i dekonstrukcja
- Dopasowanie do wzorca
- Funkcje lokalne
- Rozwinięte elementy członkowskie wyrażeń
- Adresy lokalne ref
- Wartości zwracane ref
Inne funkcje to:
- Odrzucenia
- Literały binarne i separatory cyfr
- Wyrażenia throw
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:
- Importy statyczne
- Filtry wyjątków
- Inicjatory automatycznej właściwości
- Składowe wyrażeń
- Propagacja o 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
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:
- 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 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:
- Wiązanie dynamiczne
- Argumenty nazwane/opcjonalne
- Kowariantny i kontrawariantny
- Osadzone typy międzyoperacjności
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:
- Automatycznie zaimplementowane właściwości
- 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łą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:
- Typy ogólne
- Typy częściowe
- Metody anonimowe
- Typy wartości dopuszczające wartość 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 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.