C # için doğru sürüm numaraları nelerdir?


2530

C # için doğru sürüm numaraları nelerdir? Ne zaman çıktı? Neden C # 3.5 ile ilgili herhangi bir cevap bulamıyorum ?

Bu soru öncelikle yanlış sürüm numarası, örneğin C # 3.5 kullanarak bir yanıt arayanlara yardımcı olmaktır . Umut, yanlış sürüm numarasına sahip bir cevap bulamayan herkesin bu soruyu bulacağı ve daha sonra doğru sürüm numarasıyla tekrar arayacağıdır.


74
Bu, her şeyi anlamak için iyi bir kaynaktır. en.wikipedia.org/wiki/C_Sharp_(programming_language)

1
Sorunun bir parçası olmadığı için bu ikinci paragrafın soru yerine yorumda olmaması gerekir
TankorSmash

21
@TankorSmash: Sorunun bağlamı olarak nerede kalmaya değer olduğunu yeterince önemli buluyorum. IMO, elbette.
Jon Skeet

Yanıtlar:


2874

C # dil sürüm geçmişi:

Bunlar, bu yazının yazıldığı tarihte bilinen C # sürümleridir :

OP'nin sorusuna yanıt olarak:

C # için doğru sürüm numaraları nelerdir? Ne zaman çıktı? Neden C # 3.5 ile ilgili herhangi bir cevap bulamıyorum?

C # 3.5 diye bir şey yoktur - burada karışıklığın nedeni C # 3.0'ın .NET 3.5'te mevcut olmasıdır. Bununla birlikte, dil ve çerçeve bağımsız olarak sürümlendirilir - .NET 2.0 - 3.5 için 2.0 sürümünde, CLR 4.0'ı tanıtan .NET 4, hizmet paketlerine rağmen CLR'de olduğu gibi. .NET 4.5'teki CLR'nin çeşitli geliştirmeleri vardır, ancak sürüm oluşturma belirsizdir: bazı yerlerde CLR 4.5 olarak adlandırılabilir (örneğin bu MSDN sayfası bu şekilde kullanılır), ancak Environment.Versionözellik yine de 4.0'ı bildirir. xxx.

3 Mayıs 2017 itibariyle, C # Dil Ekibi GitHub deposunda C # sürümleri ve özellikleri geçmişi oluşturdu: C # Dil Sürümlerinde Eklenen Özellikler . Ayrıca, yaklaşan ve yakın zamanda uygulanmış dil özelliklerini izleyen bir sayfa da vardır .


26
Eşzamanlı koleksiyonlar dahil etmeyi önerenlere : bu, çerçeve özelliklerinin değil , dil özelliklerinin bir listesidir . WPF,
vs.'den

3
@nawfal: Roslyn bununla alakasız - ve .NET yerli biraz ayrı. Ama temel olarak, evet, hala 4 olduğuna inanıyorum.
Jon Skeet

3
@nawfal: Dil değişikliklerinin hiçbirinde CLR değişikliği gerekmez.
Jon Skeet

9
@alper: Unity, .NET çerçevesinin ve / veya çalışma zamanının belirli bir sürümü kadar belirli bir C # sürümü olmaz. IIRC, etkili bir şekilde CLR v2'de, ancak .NET 3.5'in bazı yönleri olabilir.
Jon Skeet

3
@markmnl: Bir projenin genellikle belirli bir C # sürüm numarası yoktur ... aynı projeyi Visual Studio'nun farklı sürümlerinde açabilir ve aynı kodun birinde çalıştığını, ancak başka birinde çalışmadığını görebilirsiniz. Sen edebilir bir sözdizimsel ziyade anlamsal olarak bitti rağmen, C # sürümünü sınırlar. Ancak evet, Visual Studio 2015'te .NET 4'ü hedefleyen bir proje oluşturursanız, çoğu C # 6 özelliğini kullanabilirsiniz ...
Jon Skeet

328

Bu, çoğu yanıtla aynıdır, ancak kolaylık için tablo haline getirilmiştir ve eksiksizlik için Visual Studio ve .NET sürümlerine sahiptir .

╔════════════╦════════════╦══════════════╦═════════════╦══════════════╗
║ 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   ║    
╚════════════╩════════════╩══════════════╩═════════════╩══════════════╝

Not: .NET geliştirme bugünlerde VS'den oldukça bağımsızdır, her birinin sürümleri arasında bir korelasyon yoktur.
Daha fazla bilgi için " .NET Framework sürümleri ve bağımlılıkları " konusuna bakın .


7
.NET Core sürümleri ne olacak?
Pac0

1
@ Pac0 .NET Temel geliştirme, VS geliştirmeden hemen hemen bağımsızdır ve takip edilmesi zordur (açık kaynak). Aslında tüm VS, .NET ve .NET Core oldukça hızlı yineleniyor.
nawfal


303

C # 'ın sürüm numaraları ile ilgili en büyük sorun, Visual Studio ve .NET Framework arasındaki senkronize sürümleri nedeniyle görünen .NET Framework sürümü bağlı değil olmasıdır.

C # sürümü aslında çerçeveye değil, derleyiciye bağlıdır. Örneğin, Visual Studio 2008'de C # 3.0 yazabilir ve .NET Framework 2.0, 3.0 ve 3.5'i hedefleyebilirsiniz. C # 3.0 adlandırması, kod sözdiziminin ve desteklenen özelliklerin sürümünü ANSI C89, C90, C99 ile C'nin kod sözdizimini / özelliklerini açıkladığı gibi tanımlar.

Bir göz atın Mono ve Mono 2,0 (çoğunlukla ECMA belirtimlerden .NET Framework sürüm 2.0 uygulanan) göreceksiniz C # 3.0 sözdizimi ve özellikleri destekler.


195
  • Visual Studio.NET ile C # 1.0

  • Visual Studio 2005 ile C # 2.0

  • Visual Studio 2008 ile C # 3.0

  • Visual Studio 2010 ile C # 4.0

  • Visual Studio 2012 ile C # 5.0

  • Visual Studio 2015 ile C # 6.0

  • Visual Studio 2017 ile C # 7.0

  • Visual Studio 2019 ile C # 8.0


83

SÜRÜM_____ DİLİ ÖZELLİKLERİ ______MİKROSOFT BİLGİSAYAR

C # 1.0 / 1.2____ Aralık 2001 ? / 2003 ? ___________Ocak 2002 ?

C # 2.0 _______Eylül 2005________________ Kasım 2005 ?

C # 3.0 _______Mayıs 2006_____________________ Kasım 2006 ?

C # 4.0 _______Mart 2009 (taslak)______________ Nisan 2010 ?

C # 5.0; .NET 4.5 ile Ağustos 2012'de piyasaya sürüldü

C # 6.0; .NET 4.6 2015 ile piyasaya sürüldü

C # 7.0; .NET 4.7 2017 ile piyasaya sürüldü

C # 8.0; .NET 4.8 2019 ile piyasaya sürüldü


8
Aralık 2002'de C # 2.0 dil belirtimini nereden buldunuz? Aynı şekilde Haziran 2006'daki C # 4? Tamamen farklı ECMA sürümlerinden bahsetmediğinizden emin misiniz?
Jon Skeet


64

C # Sürüm Geçmişi:

C #, Microsoft tarafından geliştirilen basit ve güçlü bir nesne yönelimli programlama dilidir.

C #, 2002'deki ilk sürümünden bu yana çok gelişti. C #, .NET Framework 1.0 ile tanıtıldı.

Aşağıdaki tabloda her C # sürümünde sunulan önemli özellikler listelenmektedir.

Ve C # 'ın en son sürümü C # Sürümlerinde mevcuttur .

1 :resim açıklamasını buraya girin


54

Bu tablodaki sürümlerin çoğunu özetledim. Yalnızca eksik olanlar ASP.NET Core sürümleri olmalıdır. Ayrıca ASP.NET MVC'nin farklı sürümlerini de ekledim.

ASP.NET 5'in ASP.NET Core 1.0 olarak yeniden markalandığını ve ASP.NET MVC 6'nın ASP.NET Core MVC 1.0.0 olarak yeniden markalandığını unutmayın. Bu değişikliğin Ocak 2016 civarında gerçekleştiğine inanıyorum.

Tabloya ASP.NET 5 RC1'in çıkış tarihini ekledim, ancak henüz kesin çıkış tarihlerini bulamadığım için ASP.NET çekirdek 1.0 ve diğer çekirdek sürümlerini dahil etmedim. ASP.NET Core ile ilgili yayın tarihleri ​​hakkında daha fazla bilgiyi buradan edinebilirsiniz: ASP.NET Core 1.0 (ASP.NET 5 / vNext) ne zaman piyasaya sürülecek?

versiyon


1
Aynı tabloda MVC'ye sahip olmanın yararlı olduğundan emin değilim, dürüst olmak gerekirse ... sadece ayrı bir yayın programında, etkili bir şekilde.
Jon Skeet

@Jon Bu, sadece ihtiyaç duyan herkes için buraya ekleyerek doğrudur, çünkü tüm sürüm geçmişini daha iyi anlayabilmem için .NET çerçevelerinin karşılık gelen yayın tarihlerini bulmaya çalıştım.
Akılsız


37

"C # 2.0 Dil ve Derleyicisindeki Yenilikler " ve " Visual C # 2005'teki Yenilikler" adlı MSDN makalelerini karşılaştırarak, derleyicinin sürüm numaralandırmasına göre "C # major_version.minor_version" ifadesinin türetildiğini bulmak mümkündür.

.NET 1.1 ve VS 2003'e karşılık gelen ve ayrıca Visual C # .NET 2003 olarak adlandırılan C # 1.2 vardır .

Ama Microsoft daha da küçük sürüm sayısını (noktadan sonra) artırmak veya sıfır dışında numaralar, durdu 0. Yine de .NET 3.5'e karşılık gelen C #, msdn.microsoft.com'da "Visual C # 2008 Service Pack 1" olarak adlandırılmıştır .

İki paralel adlandırma vardır: Büyük .NET / derleyici sürüm numaralandırma ve Visual Studio numaralandırma.

C # 2.0 Visual C # 2005 ile eşanlamlıdır

C # 3.0 aşağıdakilere karşılık gelir (veya daha doğru bir şekilde hedefleyebilir):


3
Hayır, bu numaralandırmayı gerçekten kullanmak istiyorsanız .NET 3.5'e karşılık gelen C # "Visual C # 2008" olarak adlandırılır. C # 3.0 özellikleri "Visual C # 2008" 'de tanıtıldı, bu yüzden bağlı olduğunuz sayfada "Visual C # 2008'in Orijinal Sürümündeki Yenilikler" altındadırlar. Visual Studio sürüm numaralarını kullanmak genel olarak kötü bir fikirdir, örneğin Mono ile inşa ederken çok az mantıklıdır. C # dili iyi belirlenmiş sürüm numaralarına sahiptir ... Hangi Visual C # ürününün başlangıçta C # sürümünü tanıttığını biliyoruz, ancak aynı şey değiller.
Jon Skeet

@JonSkeet, hayır, bilmiyorum. Sizden (ve başka bir yanıtlayan) yanıtınızı güncellemesini istemek istedim, ancak yorumum çok uzun olduğu için, sonra cevap vermeye karar verdim.
Bilginiz

Ben C # 3.0 VS 2005 üzerinde çalışabilir sanmıyorum.
nawfal

7

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 sürüm 15.3

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

C # 7.2 - Visual Studio 2017 sürüm 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

7.3 # Visual Studio 2017 sürüm 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.

8.0 # .NET Core 3.0 ve Visual Studio 2019 sürüm 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

[kaynak]: https://github.com/dotnet/csharplang/blob/master/Language-Version-History.md


2

C # 8.0, c # .it'in en son sürümüdür, yalnızca .NET Core 3.x ve daha yeni sürümlerde desteklenir. En yeni özelliklerin çoğu, .NET Core 3.x'te sunulan kitaplık ve çalışma zamanı özelliklerini gerektirir

Aşağıdaki tabloda, sürüm içeren hedef çerçeve ve varsayılan C # sürümleri listelenmektedir.

Hedef çerçeveli C # dil sürümü

Kaynak - C # dil sürümlendirme


"En yeni özelliklerin birçoğu .NET Core 3.x'te tanıtılan kütüphane ve çalışma zamanı özellikleri gerektirir" - çok değil. Varsayılan yöntem uygulaması gerçekten çalışma zamanı desteği gerektirir ve ek açıklamalar içeren bir çerçeveyi hedeflerken nullable referans türleri kesinlikle daha iyi çalışır, ancak özellik genel olarak bu olmadan çalışır.
Jon Skeet
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.