Jakie są prawidłowe numery wersji dla C #?


2529

Jakie są prawidłowe numery wersji dla C #? Co wyszło kiedy? Dlaczego nie mogę znaleźć odpowiedzi na temat C # 3.5 ?

To pytanie ma przede wszystkim pomóc tym, którzy szukają odpowiedzi przy użyciu nieprawidłowego numeru wersji, np. C # 3.5 . Mamy nadzieję, że każdy, kto nie znajdzie odpowiedzi z niewłaściwym numerem wersji, znajdzie to pytanie, a następnie ponownie przeszuka właściwy numer wersji.


74
Jest to jedno z dobrych źródeł do zrozumienia wszystkiego. en.wikipedia.org/wiki/C_Sharp_(programming_language)

1
Czy ten drugi akapit nie powinien być w komentarzu zamiast pytania, ponieważ nie jest to częścią pytania
TankorSmash

21
@TankorSmash: Myślę, że jest to wystarczająco ważne jako kontekst pytania, które warto zachować tam, gdzie jest. Oczywiście IMO.
Jon Skeet

Odpowiedzi:


2873

Historia wersji języka C #:

Są to wersje C # znane w chwili pisania tego tekstu:

W odpowiedzi na pytanie PO:

Jakie są prawidłowe numery wersji dla C #? Co wyszło kiedy? Dlaczego nie mogę znaleźć odpowiedzi na temat C # 3.5?

Nie ma czegoś takiego jak C # 3.5 - przyczyną nieporozumień jest to, że C # 3.0 jest obecny w .NET 3.5. Język i struktura są jednak wersjonowane niezależnie - podobnie jak CLR, który jest w wersji 2.0 dla .NET 2.0 do 3.5, .NET 4 wprowadzający CLR 4.0, niezależnie od dodatków Service Pack. CLR w .NET 4.5 ma różne ulepszenia, ale wersjonowanie jest niejasne: w niektórych miejscach może być nazywane CLR 4.5 (na przykład ta strona MSDN tak się nazywała ), ale Environment.Versionwłaściwość wciąż zgłasza 4.0. xxx.

Na dzień 3 maja 2017 r. Zespół językowy C # stworzył historię wersji i funkcji C # w swoim repozytorium GitHub: Funkcje dodane w wersjach językowych C # . Istnieje również strona, która śledzi nadchodzące i ostatnio zaimplementowane funkcje językowe .


26
Ktokolwiek zasugerował włączenie równoczesnych kolekcji: jest to lista funkcji językowych , a nie funkcji ramowych . Zwróć uwagę na brak wzmianki o WPF itp.
Jon Skeet

3
@nawfal: Roslyn nie ma z tym związku żadnego znaczenia - a natywna platforma .NET jest nieco oddzielna. Ale w zasadzie tak, uważam, że wciąż jest 4.
Jon Skeet,

3
@nawfal: Żadna zmiana języka nie wymaga zmian CLR.
Jon Skeet,

9
@alper: Unity nie byłby konkretną wersją języka C #, tak jak konkretną wersją środowiska .NET i / lub środowiska wykonawczego. IIRC, działa skutecznie na CLR v2, ale może mieć pewne aspekty .NET 3.5.
Jon Skeet,

3
@markmnl: Projekt zazwyczaj nie ma określonego numeru wersji C # ... możesz otworzyć ten sam projekt w różnych wersjach programu Visual Studio i znaleźć ten sam kod, który działa w jednym, ale nie działa w innym. Państwo może ograniczyć wersji C #, mimo że zrobił na składniowe zamiast semantycznej bazie. Ale tak, jeśli utworzysz projekt ukierunkowany na .NET 4 w Visual Studio 2015, możesz użyć większości funkcji C # 6 ...
Jon Skeet

328

Jest to to samo, co większość odpowiedzi tutaj, ale dla uproszczenia zestawiono je w tabelach, a dla kompletności ma wersje Visual Studio i .NET .

╔════════════╦════════════╦══════════════╦═════════════╦══════════════╗
║ C# version ║ VS version ║ .NET version ║ CLR version ║ Release date ║
╠════════════╬════════════╬══════════════╬═════════════╬══════════════╣
║    1.0     ║    2002    ║    1.0       ║     1.0     ║   Feb 2002   ║
║    1.2     ║    2003    ║    1.1       ║     1.1     ║   Apr 2003   ║
║    2.0     ║    2005    ║    2.0       ║     2.0     ║   Nov 2005   ║
║            ║            ║    3.0       ║     2.0     ║   Nov 2006   ║
║    3.0     ║    2008    ║    3.5       ║     2.0     ║   Nov 2007   ║
║    4.0     ║    2010    ║    4.0       ║     4       ║   Apr 2010   ║
║    5.0     ║    2012    ║    4.5       ║     4       ║   Aug 2012   ║
║    5.0     ║    2013    ║    4.5.1     ║     4       ║   Oct 2013   ║
║            ║            ║    4.5.2     ║     4       ║   May 2014   ║
║    6.0     ║    2015    ║    4.6       ║     4       ║   Jul 2015   ║
║            ║            ║    4.6.1     ║     4       ║   Nov 2015   ║
║            ║            ║    4.6.2     ║     4       ║   Aug 2016   ║
║    7.0     ║    2017    ║              ║             ║   Mar 2017   ║
║            ║            ║    4.7       ║     4       ║   May 2017   ║
║    7.1     ║ 2017(v15.3)║              ║             ║   Aug 2017   ║
║            ║            ║    4.7.1     ║     4       ║   Oct 2017   ║
║    7.2     ║ 2017(v15.5)║              ║             ║   Dec 2017   ║
║            ║            ║    4.7.2     ║     4       ║   Apr 2018   ║
║    7.3     ║ 2017(v15.7)║              ║             ║   May 2018   ║
║    8.0     ║    2019    ║    4.8       ║     4       ║   Apr 2019   ║    
╚════════════╩════════════╩══════════════╩═════════════╩══════════════╝

Uwaga: programowanie .NET jest obecnie prawie niezależne od VS, nie ma korelacji między wersjami każdej z nich.
Aby uzyskać więcej informacji, zobacz „ Wersje i zależności platformy .NET Framework ”.


7
Co z wersjami .NET Core?
Pac0

1
@ Pac0 .NET Core jest w dużej mierze niezależny od rozwoju VS i trudno go śledzić (jest open source). W rzeczywistości wszystkie VS, .NET i .NET Core iterują dość szybko.
nawfal

C # 8.0 i NET Framework 4.8 ze społecznością VS 2019 ? 1) developercommunity.visualstudio.com/idea/612733/… 2) stackoverflow.com/questions/56651472/…
Kiquenet

303

Największym problemem związanym z numerami wersji C # jest to, że nie jest on powiązany z wersją .NET Framework, co wydaje się być spowodowane zsynchronizowanymi wydaniami między Visual Studio i .NET Framework.

Wersja C # jest faktycznie związana z kompilatorem, a nie z frameworkiem. Na przykład w Visual Studio 2008 można pisać w języku C # 3.0 i kierować na platformy .NET Framework 2.0, 3.0 i 3.5. Nomenklatura C # 3.0 opisuje wersję składni kodu i obsługiwane funkcje w taki sam sposób, jak ANSI C89, C90, C99 opisuje składnię / funkcje kodu dla C.

Spójrz na Mono , a zobaczysz, że Mono 2.0 (głównie zaimplementowana wersja 2.0 .NET Framework ze specyfikacji ECMA) obsługuje składnię i funkcje C # 3.0.


195
  • C # 1.0 z Visual Studio.NET

  • C # 2.0 z Visual Studio 2005

  • C # 3.0 z Visual Studio 2008

  • C # 4.0 z Visual Studio 2010

  • C # 5.0 z Visual Studio 2012

  • C # 6.0 z Visual Studio 2015

  • C # 7.0 z Visual Studio 2017

  • C # 8.0 z Visual Studio 2019


83

_____SPECYFIKACJA JĘZYKA WERSJI______ MICROSOFT COMPILER

C # 1.0 / 1.2____ grudzień 2001 ? / 2003 ? ___________Styczeń 2002 r ?

C # 2.0 _______wrzesień 2005________________ listopad 2005 ?

C # 3.0 _______maja 2006_____________________ listopada 2006 ?

C # 4.0 _______marzec 2009 (projekt)______________ kwiecień 2010 ?

C # 5.0; wydany z .NET 4.5 w sierpniu 2012 r

C # 6.0; wydany z .NET 4.6 2015

C # 7.0; wydany z .NET 4.7 2017

C # 8.0; wydany z .NET 4.8 2019


8
Skąd masz specyfikację języka C # 2.0 w grudniu 2002? Podobnie C # 4 w czerwcu 2006 roku? Czy na pewno nie mówisz o wydaniach ECMA, które są zupełnie inne?
Jon Skeet

4
po prostu skorzystaj z następującego linku en.wikipedia.org/wiki/C_Sharp_(programming_language)
Pramodh

64

Historia wersji C #:

C # to prosty i wydajny obiektowy język programowania opracowany przez Microsoft.

C # ewoluował znacznie od pierwszej wersji w 2002 roku. C # został wprowadzony wraz z .NET Framework 1.0.

Poniższa tabela zawiera listę ważnych funkcji wprowadzonych w każdej wersji C #.

Najnowsza wersja C # jest dostępna w wersjach C # .

1 :wprowadź opis zdjęcia tutaj


54

Podsumowałem większość wersji w tej tabeli. Brakuje tylko wersji ASP.NET Core. Dodałem także różne wersje ASP.NET MVC.

Należy pamiętać, że program ASP.NET 5 został przemianowany na ASP.NET Core 1.0, a program ASP.NET MVC 6 został przemianowany na ASP.NET Core MVC 1.0.0. Myślę, że ta zmiana nastąpiła około stycznia 2016 r.

W tabeli umieściłem datę wydania programu ASP.NET 5 RC1, ale jeszcze nie dołączyłem wersji ASP.NET core 1.0 i innych podstawowych wersji, ponieważ nie mogłem znaleźć dokładnych dat wydania. Więcej informacji na temat dat wydania dotyczących programu ASP.NET Core można znaleźć tutaj: Kiedy planowane jest wydanie programu ASP.NET Core 1.0 (ASP.NET 5 / vNext)?

Wersja


1
Nie jestem pewien, czy posiadanie MVC w tej samej tabeli jest pomocne, szczerze mówiąc ... to tylko osobny harmonogram wydania, skutecznie.
Jon Skeet

@Jon To prawda, po prostu dodając go tutaj dla każdego, kto może go potrzebować, ponieważ próbowałem znaleźć odpowiednie daty wydania frameworku .NET, aby lepiej zrozumieć całą historię wersji.
Bezmyślny


37

Porównywanie artykułów MSDN „Co nowego w języku i kompilatorze C # 2.0” i „ Co nowego w Visual C # 2005 ”, można wywnioskować, że „C # major_version.minor_version” jest ukuty zgodnie z numeracją wersji kompilatora.

Istnieje C # 1.2 odpowiadający .NET 1.1 i VS 2003, a także nazwany jako Visual C # .NET 2003 .

Ale dalej Microsoft przestał zwiększać wersję moll (po kropce) numery lub mieć je inna niż zero 0. Chociaż należy zauważyć, że C # odpowiadający .NET 3.5 jest nazwany w msdn.microsoft.com jako „Visual C # 2008 Service Pack 1” .

Istnieją dwie równoległe nazwy: według numeracji wersji .NET / kompilatora i numeracji Visual Studio.

C # 2.0 jest synonimem Visual C # 2005

C # 3.0 odpowiada (lub, bardziej poprawnie, może być celem):


3
Nie, C # odpowiadający .NET 3.5 nosi nazwę „Visual C # 2008”, jeśli naprawdę chcesz użyć tej numeracji. Funkcje C # 3.0 zostały wprowadzone w „Visual C # 2008”, dlatego na stronie, do której jesteś link, znajdują się pod „Co nowego w oryginalnej wersji Visual C # 2008”. Korzystanie z numerów wersji programu Visual Studio jest jednak ogólnie złym pomysłem, ponieważ na przykład nie ma większego sensu, gdy budujesz z Mono. Język C # ma dobrze określone numery wersji ... wiemy, który produkt Visual C # pierwotnie wprowadził tę wersję C #, ale to nie to samo.
Jon Skeet

@JonSkeet, nie, nie wiem. Chciałem poprosić ciebie (i innego odpowiadającego) o zaktualizowanie twojej odpowiedzi, ale ponieważ mój komentarz stał się zbyt długi, postanowiłem wtedy podać jako odpowiedź. Dzięki za informacje
Gennady Vanin Геннадий Ванин

Nie sądzę, że C # 3.0 może działać na VS 2005.
nawfal

7

C # 1.0 - Visual Studio .NET 2002

Classes
Structs
Interfaces
Events
Properties
Delegates
Expressions
Statements
Attributes
Literals

C # 1.2 - Visual Studio .NET 2003

Dispose in foreach
foreach over string specialization
C# 2 - Visual Studio 2005
Generics
Partial types
Anonymous methods
Iterators
Nullable types
Getter/setter separate accessibility
Method group conversions (delegates)
Static classes
Delegate inference

C # 3 - Visual Studio 2008

Implicitly typed local variables
Object and collection initializers
Auto-Implemented properties
Anonymous types
Extension methods
Query expressions
Lambda expression
Expression trees
Partial methods

C # 4 - Visual Studio 2010

Dynamic binding
Named and optional arguments
Co- and Contra-variance for generic delegates and interfaces
Embedded interop types ("NoPIA")

C # 5 - Visual Studio 2012

    Asynchronous methods
    Caller info attributes

C # 6 - Visual Studio 2015

Draft Specification online
Compiler-as-a-service (Roslyn)
Import of static type members into namespace
Exception filters
Await in catch/finally blocks
Auto property initializers
Default values for getter-only properties
Expression-bodied members
Null propagator (null-conditional operator, succinct null checking)
String interpolation
nameof operator
Dictionary initializer

C # 7.0 - Visual Studio 2017

Out variables
Pattern matching
Tuples
Deconstruction
Discards
Local Functions
Binary Literals
Digit Separators
Ref returns and locals
Generalized async return types
More expression-bodied members
Throw expressions

C # 7.1 - Visual Studio 2017 wersja 15.3

Async main
Default expressions
Reference assemblies
Inferred tuple element names
Pattern-matching with generics

C # 7.2 - Visual Studio 2017 wersja 15.5

Span and ref-like types
In parameters and readonly references
Ref conditional
Non-trailing named arguments
Private protected accessibility
Digit separator after base specifier

C # 7.3 - Visual Studio 2017 wersja 15.7

System.Enum, System.Delegate and unmanaged constraints.
Ref local re-assignment: Ref locals and ref parameters can now be reassigned with the ref assignment operator (= ref).
Stackalloc initializers: Stack-allocated arrays can now be initialized, e.g. Span<int> x = stackalloc[] { 1, 2, 3 };.
Indexing movable fixed buffers: Fixed buffers can be indexed into without first being pinned.
Custom fixed statement: Types that implement a suitable GetPinnableReference can be used in a fixed statement.
Improved overload candidates: Some overload resolution candidates can be ruled out early, thus reducing ambiguities.
Expression variables in initializers and queries: Expression variables like out var and pattern variables are allowed in field initializers, constructor initializers and LINQ queries.
Tuple comparison: Tuples can now be compared with == and !=.
Attributes on backing fields: Allows [field: …] attributes on an auto-implemented property to target its backing field.

C # 8.0 - .NET Core 3.0 i Visual Studio 2019 wersja 16.3

Nullable reference types: express nullability intent on reference types with ?, notnull constraint and annotations attributes in APIs, the compiler will use those to try and detect possible null values being dereferenced or passed to unsuitable APIs.
Default interface members: interfaces can now have members with default implementations, as well as static/private/protected/internal members except for state (ie. no fields).
Recursive patterns: positional and property patterns allow testing deeper into an object, and switch expressions allow for testing multiple patterns and producing corresponding results in a compact fashion.
Async streams: await foreach and await using allow for asynchronous enumeration and disposal of IAsyncEnumerable<T> collections and IAsyncDisposable resources, and async-iterator methods allow convenient implementation of such asynchronous streams.
Enhanced using: a using declaration is added with an implicit scope and using statements and declarations allow disposal of ref structs using a pattern.
Ranges and indexes: the i..j syntax allows constructing System.Range instances, the ^k syntax allows constructing System.Index instances, and those can be used to index/slice collections.
Null-coalescing assignment: ??= allows conditionally assigning when the value is null.
Static local functions: local functions modified with static cannot capture this or local variables, and local function parameters now shadow locals in parent scopes.
Unmanaged generic structs: generic struct types that only have unmanaged fields are now considered unmanaged (ie. they satisfy the unmanaged constraint).
Readonly members: individual members can now be marked as readonly to indicate and enforce that they do not modify instance state.
Stackalloc in nested contexts: stackalloc expressions are now allowed in more expression contexts.
Alternative interpolated verbatim strings: @$"..." strings are recognized as interpolated verbatim strings just like $@"...".
Obsolete on property accessors: property accessors can now be individually marked as obsolete.
Permit t is null on unconstrained type parameter

[źródło]: https://github.com/dotnet/csharplang/blob/master/Language-Version-History.md


2

C # 8.0 to najnowsza wersja c #. Jest obsługiwana tylko w .NET Core 3.x i nowszych wersjach. Wiele najnowszych funkcji wymaga funkcji biblioteki i środowiska wykonawczego wprowadzonych w .NET Core 3.x

W poniższej tabeli wymieniono docelową strukturę wraz z wersją i ich domyślną wersją C #.

Wersja językowa C # z frameworkiem Target

Źródło - wersja językowa C #


„Wiele najnowszych funkcji wymaga funkcji biblioteki i środowiska wykonawczego wprowadzonych w .NET Core 3.x” - naprawdę nie tak wiele. Domyślna implementacja metody naprawdę wymaga obsługi środowiska wykonawczego, a typy zerowalnych odwołań zdecydowanie działają lepiej podczas celowania w strukturę z adnotacjami, ale funkcja działa ogólnie bez tego.
Jon Skeet
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.