Số phiên bản chính xác cho C # là gì?


2531

Số phiên bản chính xác cho C # là gì? Điều gì xảy ra khi nào? Tại sao tôi không thể tìm thấy bất kỳ câu trả lời nào về C # 3.5 ?

Câu hỏi này chủ yếu để hỗ trợ những người đang tìm kiếm câu trả lời bằng cách sử dụng số phiên bản không chính xác, ví dụ C # 3.5 . Hy vọng là bất cứ ai không tìm thấy câu trả lời với số phiên bản sai sẽ tìm thấy câu hỏi này và sau đó tìm kiếm lại với số phiên bản phù hợp.


74
Đây là một trong những nguồn tốt để hiểu tất cả mọi thứ. vi.wikipedia.org/wiki/C_Sharp_(programming_lingu)

1
Không nên đoạn thứ hai đó trong một bình luận thay vì câu hỏi, vì nó không phải là một phần của câu hỏi
TankorSmash

21
@TankorSmash: Tôi nghĩ nó đủ quan trọng như bối cảnh của câu hỏi rằng nó đáng để giữ nguyên vị trí của nó. IMO, tất nhiên.
Jon Skeet

Câu trả lời:


2874

Lịch sử phiên bản ngôn ngữ C #:

Đây là những phiên bản của C # được biết đến tại thời điểm viết bài này:

  • C # 1.0 được phát hành với .NET 1.0 và VS2002 (tháng 1 năm 2002)
  • C # 1.2 (đủ kỳ lạ); phát hành với .NET 1.1 và VS2003 (tháng 4 năm 2003). Phiên bản đầu tiên để gọi Disposevề IEnumerators mà thực hiện IDisposable. Một vài tính năng nhỏ khác.
  • C # 2.0 được phát hành với .NET 2.0 và VS2005 (tháng 11 năm 2005). Các tính năng mới chính: generic, phương thức ẩn danh, loại nullable, khối lặp
  • C # 3.0 được phát hành với .NET 3.5 và VS2008 (tháng 11 năm 2007). Các tính năng mới chính: biểu thức lambda, phương thức mở rộng, cây biểu thức, kiểu ẩn danh, gõ ngầm ( var), biểu thức truy vấn
  • C # 4.0 được phát hành với .NET 4 và VS2010 (tháng 4 năm 2010). Các tính năng mới chính: liên kết muộn ( dynamic), phương sai chung của đại biểu và giao diện, hỗ trợ COM nhiều hơn, đối số được đặt tên, kiểu dữ liệu tuple và các tham số tùy chọn
  • C # 5.0 được phát hành với .NET 4.5 và VS2012 (tháng 8 năm 2012). Các tính năng chính : lập trình async, thuộc tính thông tin người gọi. Thay đổi đột phá: đóng vòng biến .
  • C # 6.0 được phát hành với .NET 4.6 và VS2015 (tháng 7 năm 2015). Được thực hiện bởi Roslyn . Các tính năng : bộ khởi tạo cho các thuộc tính được triển khai tự động, sử dụng các lệnh để nhập thành viên tĩnh, bộ lọc ngoại lệ, bộ khởi tạo phần tử, awaittrong catchfinally, Addcác phương thức mở rộng trong bộ khởi tạo bộ sưu tập.
  • C # 7.0 được phát hành với .NET 4.7 và VS2017 (tháng 3 năm 2017). Các tính năng mới chính : tuples , ref local và ref return , khớp mẫu (bao gồm các câu lệnh chuyển đổi dựa trên mẫu), khai báo tham số nội tuyếnout , hàm cục bộ , chữ nhị phân, dấu tách chữ sốtrả về async tùy ý .
  • C # 7.1 được phát hành cùng với VS2017 v15.3 (Tháng 8 năm 2017) Các tính năng mới: async main , suy luận tên thành viên , biểu thức mặc định , khớp mẫu với tướng .
  • C # 7.2 được phát hành cùng với VS2017 v15.5 (tháng 11 năm 2017) Các tính năng mới: công cụ sửa đổi truy cập được bảo vệ riêng tư , Span <T>, còn gọi là con trỏ bên trong, còn gọi là stackonly struct , mọi thứ khác .
  • C # 7.3 được phát hành với VS2017 v15.7 (tháng 5 năm 2018). Các tính năng mới: enum, đại biểu và các unmanagedràng buộc loại chung . refTái chỉ định. Cải tiến không an toàn: stackallockhởi tạo, fixedbộ đệm được lập chỉ mục , các fixedcâu lệnh tùy chỉnh . Cải thiện độ phân giải quá tải. Biến biểu thức trong khởi tạo và truy vấn. ==!=được định nghĩa cho các bộ dữ liệu. Các trường sao lưu thuộc tính tự động hiện có thể được nhắm mục tiêu bởi các thuộc tính.
  • C # 8.0 được phát hành với .Net Core 3.0 và VS2019 v16.3 (tháng 9 năm 2019). Các tính năng mới chính : loại tham chiếu nullable , luồng không đồng bộ , Chỉ số và Phạm vi , thành viên chỉ đọc , sử dụng khai báo , phương thức giao diện mặc định , Hàm cục bộ tĩnhTăng cường chuỗi nguyên văn nội suy .
  • C # 9.0 vẫn còn trong bản xem trước. Dự kiến ​​sẽ được phát hành vào tháng 11 năm 2020 cùng với .Net 5 . Các tính năng mới chính : thuộc tính chỉ init, bản ghi, biểu thức, lớp dữ liệu, bản ghi vị trí, chương trình cấp cao nhất, kết hợp mẫu được cải thiện (mẫu đơn giản, mẫu quan hệ, mẫu logic), nhập mục tiêu được cải thiện ( newbiểu thức kiểu mục tiêu , mục tiêu gõ ???), trả về covariant. Các tính năng nhỏ: thư giãn thứ tự refpartialsửa đổi, kiểm tra null tham số, lambda loại bỏ tham số, ints gốc , thuộc tính trên các hàm cục bộ, con trỏ hàm, lambdas tĩnh, mở rộng GetEnumerator, khởi tạo mô-đun, mở rộng một phần.

Trả lời câu hỏi của OP:

Số phiên bản chính xác cho C # là gì? Điều gì xảy ra khi nào? Tại sao tôi không thể tìm thấy bất kỳ câu trả lời nào về C # 3.5?

Không có thứ gọi là C # 3.5 - nguyên nhân gây nhầm lẫn ở đây là C # 3.0 có trong .NET 3.5. Tuy nhiên, ngôn ngữ và khung được phiên bản độc lập - như CLR, phiên bản 2.0 cho .NET 2.0 đến 3.5, .NET 4 giới thiệu CLR 4.0, các gói dịch vụ mặc dù vậy. CLR trong .NET 4.5 có nhiều cải tiến khác nhau, nhưng phiên bản không rõ ràng: ở một số nơi, nó có thể được gọi là CLR 4.5 ( ví dụ trang MSDN này được sử dụng để đề cập theo cách đó), nhưng thuộc Environment.Versiontính vẫn báo cáo 4.0. xxx.

Kể từ ngày 3 tháng 5 năm 2017, Nhóm Ngôn ngữ C # đã tạo lịch sử các phiên bản và tính năng của C # trên kho GitHub của họ: Các tính năng được thêm vào trong Phiên bản ngôn ngữ C # . Ngoài ra còn có một trang theo dõi các tính năng ngôn ngữ sắp tới và được triển khai gần đây .


26
Cho bất cứ ai đề xuất bao gồm các bộ sưu tập đồng thời: đây là danh sách các tính năng ngôn ngữ , không phải tính năng khung . Lưu ý việc không đề cập đến WPF, v.v.
Jon Skeet

3
@nawfal: Roslyn không liên quan đến điều đó - và .NET bản địa có phần riêng biệt. Nhưng về cơ bản, vâng, tôi tin rằng nó vẫn còn 4.
Jon Skeet

3
@nawfal: Không có thay đổi ngôn ngữ nào cần bất kỳ thay đổi CLR nào.
Jon Skeet

9
@alper: Unity sẽ không phải là phiên bản cụ thể của C # giống như một phiên bản cụ thể của .NET framework và / hoặc runtime. IIRC, nó hoạt động hiệu quả trên CLR v2, nhưng có thể có một số khía cạnh của .NET 3.5.
Jon Skeet

3
@markmnl: Một dự án thường không số phiên bản C # được chỉ định ... bạn có thể mở cùng một dự án trong các phiên bản khác nhau của Visual Studio và tìm thấy cùng một mã hoạt động trong một nhưng không hoạt động trong một phiên bản khác. Bạn có thể giới hạn phiên bản C #, mặc dù điều đó được thực hiện trên cơ sở cú pháp hơn là dựa trên ngữ nghĩa. Nhưng vâng, nếu bạn tạo một dự án nhắm mục tiêu .NET 4 trong Visual Studio 2015, bạn có thể sử dụng hầu hết các tính năng C # 6 ...
Jon Skeet

328

Điều này giống như hầu hết các câu trả lời ở đây, nhưng được lập bảng để dễ dàng và nó có phiên bản Visual Studio.NET để hoàn thiện.

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

Lưu ý: Phát triển .NET khá độc lập với VS ngày nay, không có mối tương quan giữa các phiên bản của mỗi phiên bản.
Tham khảo " Phiên bản .NET Framework và phụ thuộc " để biết thêm.


7
Còn phiên bản .NET Core thì sao?
Pac0

1
@ Pac0 .NET Core phát triển khá độc lập với phát triển VS và khó theo dõi (là nguồn mở). Trong thực tế, tất cả các VS, .NET và .NET Core đều lặp lại khá nhanh.
nawfal

C # 8.0 và NET Framework 4.8 với Cộng đồng VS 2019 ? 1) Developercommunity.visualstudio.com/idea/612733/ Cách 2) stackoverflow.com/questions/56651472/ trên
Kiquenet

303

Vấn đề lớn nhất khi xử lý số phiên bản của C # là nó không bị ràng buộc với phiên bản .NET Framework, điều này dường như là do các bản phát hành được đồng bộ hóa giữa Visual Studio và .NET Framework.

Phiên bản của C # thực sự bị ràng buộc với trình biên dịch, không phải khung. Chẳng hạn, trong Visual Studio 2008, bạn có thể viết C # 3.0 và nhắm mục tiêu .NET Framework 2.0, 3.0 và 3.5. Danh pháp C # 3.0 mô tả phiên bản của cú pháp mã và các tính năng được hỗ trợ theo cách tương tự như ANSI C89, C90, C99 mô tả cú pháp / tính năng mã cho C.

Hãy xem Mono và bạn sẽ thấy Mono 2.0 (phiên bản 2.0 được triển khai chủ yếu của .NET Framework từ thông số kỹ thuật ECMA) hỗ trợ cú pháp và tính năng của C # 3.0.


195
  • C # 1.0 với Visual Studio.NET

  • C # 2.0 với Visual Studio 2005

  • C # 3.0 với Visual Studio 2008

  • C # 4.0 với Visual Studio 2010

  • C # 5.0 với Visual Studio 2012

  • C # 6.0 với Visual Studio 2015

  • C # 7.0 với Visual Studio 2017

  • C # 8.0 với Visual Studio 2019


83

PHIÊN BẢN_____ THÔNG SỐ PHIÊN BẢN MÁY TÍNH ______MICROSOFT

C # 1.0 / 1.2____ tháng 12 năm 2001 ? / 2003 ? ___________Tháng 1/2002 ?

C # 2.0 _______Tháng 9 năm 2005________________ Tháng 11 năm 2005 ?

C # 3.0 _______Tháng 5 năm 2006_____________________ Tháng 11 năm 2006 ?

C # 4.0 _______Tháng 3 năm 2009 (dự thảo)______________ Tháng 4 năm 2010 ?

C # 5.0; phát hành với .NET 4.5 vào tháng 8 năm 2012

C # 6.0; phát hành với .NET 4.6 2015

C # 7.0; phát hành với .NET 4.7 2017

C # 8.0; phát hành với .NET 4.8 2019


8
Bạn đã nhận được thông số ngôn ngữ C # 2.0 vào tháng 12 năm 2002 từ đâu? Tương tự như vậy C # 4 vào tháng 6 năm 2006? Bạn có chắc là bạn không nói về các phiên bản ECMA, hai phiên bản hoàn toàn khác nhau?
Jon Skeet

4
chỉ cần tham khảo liên kết sau en.wikipedia.org/wiki/C_Sharp_(programming_lingu)
Pramodh

64

Lịch sử phiên bản C #:

C # là ngôn ngữ lập trình hướng đối tượng đơn giản và mạnh mẽ được phát triển bởi Microsoft.

C # đã phát triển nhiều kể từ lần phát hành đầu tiên vào năm 2002. C # được giới thiệu với .NET Framework 1.0.

Bảng sau liệt kê các tính năng quan trọng được giới thiệu trong mỗi phiên bản của C #.

Và phiên bản mới nhất của C # có sẵn trong Phiên bản C # .

1 :nhập mô tả hình ảnh ở đây


54

Tôi đã tóm tắt hầu hết các phiên bản trong bảng này. Những cái duy nhất còn thiếu phải là phiên bản ASP.NET Core. Tôi cũng đã thêm các phiên bản khác nhau của ASP.NET MVC.

Lưu ý rằng ASP.NET 5 đã được đổi thương hiệu thành ASP.NET Core 1.0 và ASP.NET MVC 6 đã được đổi tên thành ASP.NET Core MVC 1.0.0. Tôi tin rằng sự thay đổi này xảy ra vào khoảng tháng 1 năm 2016.

Tôi đã bao gồm ngày phát hành của ASP.NET 5 RC1 trong bảng, nhưng tôi chưa bao gồm ASP.NET core 1.0 và các phiên bản lõi khác, vì tôi không thể tìm thấy ngày phát hành chính xác. Bạn có thể đọc thêm về ngày phát hành liên quan đến ASP.NET Core tại đây: Khi nào ASP.NET Core 1.0 (ASP.NET 5 / vNext) được lên lịch phát hành?

Phiên bản


1
Tôi không chắc chắn rằng có MVC trong cùng một bảng là hữu ích, thành thật mà nói ... nó chỉ nằm trong một lịch trình phát hành riêng biệt, một cách hiệu quả.
Jon Skeet

@Jon Điều này là đúng, chỉ cần thêm nó ở đây cho bất kỳ ai có thể cần nó, bởi vì tôi đã cố gắng tìm ra ngày phát hành chính xác của .NET framework, để tôi hiểu rõ hơn về toàn bộ lịch sử phiên bản.
Vô tâm


37

So sánh các bài viết MSDN "Có gì mới trong Trình biên dịch và ngôn ngữ C # 2.0" và " Có gì mới trong Visual C # 2005 ", có thể suy ra rằng "C # Major_version.minor_version" được tạo ra theo cách đánh số phiên bản của trình biên dịch.

C # 1.2 tương ứng với .NET 1.1 và VS 2003 và cũng được đặt tên là Visual C # .NET 2003 .

Nhưng hơn nữa trên Microsoft đã dừng để tăng số phiên bản nhỏ (sau dấu chấm) hoặc để chúng khác 0 0. Mặc dù cần lưu ý rằng C # tương ứng với .NET 3.5 được đặt tên trong msdn.microsoft.com là "Visual C # 2008 Gói dịch vụ 1" .

Có hai cách đặt tên song song: Đánh số phiên bản .NET / trình biên dịch chính và đánh số Visual Studio.

C # 2.0 là từ đồng nghĩa với Visual C # 2005

C # 3.0 tương ứng (hoặc chính xác hơn là có thể nhắm mục tiêu) tới:


3
Không, C # tương ứng với .NET 3.5 được đặt tên là "Visual C # 2008" nếu bạn thực sự muốn sử dụng cách đánh số đó. Các tính năng C # 3.0 đã được giới thiệu trong "Visual C # 2008", đó là lý do tại sao trên trang bạn được liên kết với chúng trong phần "Có gì mới trong Phiên bản phát hành gốc của Visual C # 2008". Mặc dù vậy, sử dụng số phiên bản Visual Studio là một ý tưởng tồi, vì nó rất có ý nghĩa khi bạn xây dựng với Mono chẳng hạn. Ngôn ngữ C # có số phiên bản được chỉ định rõ ... chúng tôi biết sản phẩm Visual C # nào ban đầu giới thiệu phiên bản C # đó, nhưng chúng không giống nhau.
Jon Skeet

@JonSkeet, không, tôi không. Muốn yêu cầu bạn (và một người trả lời khác) cập nhật câu trả lời của bạn nhưng vì nhận xét của tôi quá dài, tôi đã quyết định đặt câu trả lời. Cảm ơn thông tin của bạn
Gennady Vanin éеннадий Внаин

Tôi không nghĩ C # 3.0 có thể chạy trên 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 phiên bản 15.3

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

C # 7.2 - Visual Studio 2017 phiên bản 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 phiên bản 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 và Visual Studio 2019 phiên bản 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

[nguồn]: https://github.com/dotnet/csharplang/blob/master/Lingu-Version-History.md


2

C # 8.0 là phiên bản mới nhất của c # .it chỉ được hỗ trợ trên .NET Core 3.x và các phiên bản mới hơn. Nhiều tính năng mới nhất yêu cầu các tính năng thư viện và thời gian chạy được giới thiệu trong .NET Core 3.x

Bảng sau liệt kê khung mục tiêu với phiên bản và phiên bản C # mặc định của chúng.

Phiên bản ngôn ngữ C # với khung Target

Nguồn - Phiên bản ngôn ngữ C #


"Nhiều tính năng mới nhất yêu cầu các tính năng thư viện và thời gian chạy được giới thiệu trong .NET Core 3.x" - thực sự không nhiều. Việc triển khai phương thức mặc định thực sự yêu cầu hỗ trợ thời gian chạy và các loại tham chiếu nullable chắc chắn hoạt động tốt hơn khi nhắm mục tiêu một khung có chú thích, nhưng tính năng này hoạt động tổng thể mà không cần điều đó.
Jon Skeet
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.