C #의 올바른 버전 번호는 무엇입니까?


2529

C #의 올바른 버전 번호는 무엇입니까? 언제 나왔어? C # 3.5에 대한 답변을 찾을 수없는 이유는 무엇 입니까?

이 질문은 주로 잘못된 버전 번호 (예 : C # 3.5)를 사용하여 답변을 검색하는 사람들을 돕기위한 것 입니다. 버전 번호가 잘못된 답변을 찾지 못한 사람은 질문을 찾은 다음 올바른 버전 번호로 다시 검색 하기를 희망 합니다.


74
이것은 모든 것을 이해하는 좋은 소스 중 하나입니다. en.wikipedia.org/wiki/C_Sharp_(programming_language)

1
질문의 일부가 아니기 때문에 두 번째 단락이 질문 대신 주석에 포함되어 있지 않아야합니다.
TankorSmash

21
@TankorSmash : 질문의 맥락에서 그것이 어디에 있는지 지켜 볼 가치가 있다는 것이 충분히 중요하다고 생각합니다. 물론 IMO.
Jon Skeet

답변:


2873

C # 언어 버전 기록 :

이 글을 쓰는 시점에 알려진 C # 버전은 다음과 같습니다.

  • .NET 1.0 및 VS2002와 함께 릴리스 된 C # 1.0 (2002 년 1 월)
  • C # 1.2 (기괴하게도 충분 함); .NET 1.1 및 VS2003 (2003 년 4 월)과 함께 릴리스되었습니다. 호출에 대한 첫 번째 버전 DisposeIEnumerator구현의 IDisposable. 다른 작은 기능들.
  • C # 2.0 은 .NET 2.0 및 VS2005 (2005 년 11 월)와 함께 릴리스되었습니다. 주요 새로운 기능 : 제네릭, 익명 메서드, nullable 형식, 반복자 블록
  • C # 3.0 은 .NET 3.5 및 VS2008 (2007 년 11 월)과 함께 릴리스되었습니다. 새로운 주요 기능 : 람다 식, 확장 메서드, 식 트리, 익명 형식, 암시 적 타이핑 ( var), 쿼리 식
  • .NET 4 및 VS2010 (2010 년 4 월)과 함께 릴리스 된 C # 4.0 . 주요 새로운 기능 : 후기 바인딩 ( dynamic), 델리게이트 및 인터페이스 일반 분산, 추가 COM 지원, 명명 된 인수, 튜플 데이터 형식 및 선택적 매개 변수
  • .NET 4.5 및 VS2012 (2012 년 8 월)와 함께 릴리스 된 C # 5.0 . 주요 기능 : 비동기 프로그래밍, 발신자 정보 속성. 주요 변경 사항 : 루프 변수 클로저 .
  • .NET 4.6 및 VS2015 (2015 년 7 월)와 함께 릴리스 된 C # 6.0 . Roslyn에 의해 구현되었습니다 . 특징 : 자동 구현 속성의 초기화 프로그램, 지시문을 사용하여 정적 멤버 가져 오기, 예외 필터, 요소 초기화 프로그램 및 awaitin catch, 및 컬렉션 초기화 finally프로그램의 확장 Add메소드.
  • .NET 4.7 및 VS2017 (2017 년 3 월)과 함께 릴리스 된 C # 7.0 . 새로운 주요 기능 : 튜플 , 참조 로컬 및 참조 리턴 , 패턴 일치 (패턴 기반 스위치 명령문 포함), 인라인 out매개 변수 선언 , 로컬 함수 , 이진 리터럴, 숫자 구분 기호임의의 비동기 리턴 .
  • VS2017 v15.3과 함께 릴리스 된 C # 7.1 (2017 년 8 월) 새로운 기능 : 비동기 기본 , 튜플 멤버 이름 유추 , 기본 표현식 , 제네릭과 패턴 일치 .
  • VS2017 v15.5와 함께 릴리스 된 C # 7.2 (2017 년 11 월) 새로운 기능 : 개인 보호 액세스 수정 자 , Span <T>, 일명 내부 포인터, 일명 스택 전용 구조체 및 기타 모든 기능 .
  • VS2017 v15.7 (2018 년 5 월)과 함께 릴리스 된 C # 7.3 새로운 기능 : 열거, 위임 및 unmanaged제네릭 형식 제약 . ref재 할당. 안전하지 않은 개선 : stackalloc초기화, 고정되지 않은 인덱스 fixed버퍼, 사용자 지정 fixed문 오버로드 해상도가 향상되었습니다. 이니셜 라이저 및 쿼리의 표현식 변수 ==!=튜플에 대해 정의. 자동 속성의 지원 필드는 이제 속성으로 타겟팅 할 수 있습니다.
  • .Net Core 3.0 및 VS2019 v16.3 (2019 년 9 월)과 함께 릴리스 된 C # 8.0 . 주요 새로운 기능 : 널 레퍼런스 타입 , 비동기 스트림 , 지수 및 범위 , 읽기 전용 부재 , 선언하여 , 디폴트 인터페이스 방법 , 정적 로컬 기능보간 그대로 문자열의 향상 .
  • C # 9.0은 여전히 미리보기 상태입니다. .Net 5와 함께 2020 년 11 월에 출시 될 예정입니다 . 주요 새로운 기능 : 초기화 전용 속성, 레코드, 식 포함, 데이터 클래스, 위치 레코드, 최상위 프로그램, 개선 된 패턴 일치 (단순 유형 패턴, 관계형 패턴, 논리 패턴), 개선 된 대상 유형 지정 (타겟 유형 new표현식, 대상 유형 ???), 공변량을 반환합니다. 사소한 기능 : 순서 refpartial수정 자 완화 , 매개 변수 null 검사, 람다 삭제 매개 변수, native int, 로컬 함수의 속성, 함수 포인터, 정적 람다, 확장 GetEnumerator, 모듈 이니셜 라이저, 부분 확장.

OP의 질문에 대한 답변 :

C #의 올바른 버전 번호는 무엇입니까? 언제 나왔어? C # 3.5에 대한 답변을 찾을 수없는 이유는 무엇입니까?

C # 3.5와 같은 것은 없습니다. 혼동의 원인은 C # 3.0이 .NET 3.5에 있다는 것입니다. 그러나 언어와 프레임 워크는 독립적으로 버전이 지정됩니다. CLR과 마찬가지로 .NET 2.0에서 3.5 버전 2.0, CLR 4.0을 도입 한 .NET 4 버전, 서비스 팩에도 불구하고. .NET 4.5의 CLR은 여러 가지 개선 사항이 있지만 버전 관리가 불분명합니다. 어떤 곳에서는 CLR 4.5 (예 : 이 MSDN 페이지 에서이를 참조하는 데 사용됨)라고 할 수 있지만 Environment.Version속성은 여전히 ​​4.0을보고합니다. 트리플 엑스.

2017 년 5 월 3 일부터 C # 언어 팀은 GitHub 리포지토리에 C # 버전 및 기능에 대한 기록을 만들었습니다 . C # 언어 버전에 추가 된 기능 . 다가오는 최신 언어 기능을 추적하는 페이지있습니다 .


26
동시 컬렉션 포함을 제안한 사람 에게는 프레임 워크 기능이 아닌 언어 기능 의 목록입니다 . WPF 등의 언급이 없음에 주목하십시오.
Jon Skeet

3
@nawfal : Roslyn은 그와 관련이 없으며 .NET 네이티브는 다소 분리되어 있습니다. 그러나 기본적으로, 그래, 나는 여전히 4 믿습니다
존 소총을

3
@nawfal : 언어 변경에는 CLR 변경이 필요하지 않습니다.
Jon Skeet

9
@alper : Unity는 특정 버전의 .NET 프레임 워크 및 / 또는 런타임만큼 C #의 특정 버전이 아닙니다. IIRC는 CLR v2에 효과적으로 있지만 .NET 3.5의 일부 측면을 가질 수 있습니다.
Jon Skeet

3
@markmnl, • 프로젝트는 일반적으로하지 않습니다 당신은 비주얼 스튜디오의 다른 버전에서 동일한 프로젝트를 열고 하나의 동일한 코드가 작동을 찾을 다른에서 작업을하지 않는 수 ... 지정된 C # 버전 번호를. C # 버전은 의미가 아닌 구문 방식으로 수행되지만 제한 있습니다 . 그러나 예, Visual Studio 2015에서 .NET 4를 대상으로하는 프로젝트를 만들면 대부분의 C # 6 기능을 사용할 수 있습니다.
Jon Skeet

328

이것은 대부분의 답변과 동일하지만 쉽게 표 형식으로 표시되며 완전성을 위해 Visual Studio.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   ║    
╚════════════╩════════════╩══════════════╩═════════════╩══════════════╝

참고 : .NET 개발은 요즘 VS와 거의 독립적이며 각 버전 사이에는 상관 관계가 없습니다.
자세한 내용은 " .NET Framework 버전 및 종속성 "을 참조하십시오.


7
.NET Core 버전은 어떻습니까?
Pac0

1
@ Pac0 .NET Core 개발은 VS 개발과 거의 독립적이며 추적하기가 어렵습니다 (오픈 소스). 실제로 모든 VS, .NET 및 .NET Core는 매우 빠르게 반복됩니다.
nawfal


303

C #의 버전 번호를 처리 할 때 가장 큰 문제는 Visual Studio와 .NET Framework 간의 동기화 된 릴리스 때문인 것으로 보이는 .NET Framework 버전과 관련이 없다는 사실입니다.

C #의 버전은 실제로 프레임 워크가 아닌 컴파일러에 바인딩됩니다. 예를 들어 Visual Studio 2008에서는 C # 3.0을 작성하고 .NET Framework 2.0, 3.0 및 3.5를 대상으로 할 수 있습니다. C # 3.0 명명법은 ANSI C89, C90, C99 가 C의 코드 구문 / 기능을 설명하는 것과 동일한 방식으로 코드 구문의 버전과 지원되는 기능을 설명합니다.

Mono를 살펴보면 Mono 2.0 (주로 ECMA 사양에서 구현 된 .NET Framework 버전 2.0)이 C # 3.0 구문과 기능을 지원한다는 것을 알 수 있습니다.


195
  • Visual Studio.NET을 사용하는 C # 1.0

  • Visual Studio 2005가 포함 된 C # 2.0

  • Visual Studio 2008이 포함 된 C # 3.0

  • Visual Studio 2010이 포함 된 C # 4.0

  • Visual Studio 2012의 C # 5.0

  • Visual Studio 2015가 포함 된 C # 6.0

  • Visual Studio 2017이 포함 된 C # 7.0

  • Visual Studio 2019가 포함 된 C # 8.0


83

버전_____ 언어 사양 ______MICROSOFT COMPILER

C # 1.0 / 1.2____ 2001 년 12 월 ? / 2003 ? ___________2002 년 1 월 ?

C # 2.0 _______2005 년 9 월 2005 년________________ 11 월 ?

C # 3.0 _______2006 년 5 월 2006 년_____________________ 11 월 ?

C # 4.0 _______2009 년 3 월 (초안)______________ 2010 년 4 월 ?

C # 5.0; 2012 년 8 월 .NET 4.5와 함께 출시

C # 6.0; .NET 4.6 2015와 함께 출시

C # 7.0; .NET 4.7 2017과 함께 출시

C # 8.0; .NET 4.8 2019로 출시


8
2002 년 12 월 C # 2.0 언어 사양은 어디서 얻었습니까? 2006 년 6 월 C # 4도 마찬가지입니까? 완전히 다른 ECMA 에디션에 대해 이야기하고 있지 않습니까?
Jon Skeet

4
다음 링크를 참조하십시오. en.wikipedia.org/wiki/C_Sharp_(programming_language)
Pramodh

64

C # 버전 기록 :

C #은 Microsoft에서 개발 한 간단하고 강력한 개체 지향 프로그래밍 언어입니다.

C #은 2002 년 첫 릴리스 이후 많은 발전을 거쳤습니다. C #은 .NET Framework 1.0과 함께 도입되었습니다.

다음 표에는 각 버전의 C #에 도입 된 중요한 기능이 나와 있습니다.

최신 버전의 C #은 C # 버전 에서 사용할 수 있습니다 .

1 :여기에 이미지 설명을 입력하십시오


54

이 표에서 대부분의 버전을 요약했습니다. 유일하게 누락 된 것은 ASP.NET Core 버전이어야합니다. 다른 버전의 ASP.NET MVC도 추가했습니다.

ASP.NET 5는 ASP.NET Core 1.0으로 이름이 변경되었으며 ASP.NET MVC 6은 ASP.NET Core MVC 1.0.0으로 이름이 변경되었습니다. 나는이 변화가 2016 년 1 월경 쯤에 일어났다 고 생각합니다.

표에 ASP.NET 5 RC1의 릴리스 날짜를 포함 시켰지만 정확한 릴리스 날짜를 찾을 수 없기 때문에 아직 ASP.NET 코어 1.0 및 기타 코어 버전을 포함시키지 않았습니다. ASP.NET Core 관련 릴리스 날짜에 대한 자세한 내용은 다음을 참조하십시오. ASP.NET Core 1.0 (ASP.NET 5 / vNext)은 언제 출시 될 예정입니까?

버전


1
동일한 테이블에 MVC를 사용하는 것이 도움이 될지 확실하지 않습니다. 솔직히 말하면 ... 별도의 릴리스 일정에 있습니다.
Jon Skeet

@ Jon 이것은 사실입니다. 필요한 사람을 위해 여기에 추가하면 .NET 프레임 워크의 해당 릴리스 날짜를 찾으려고 노력했기 때문에 전체 버전 기록을 더 잘 이해할 수 있습니다.
Mindless


37

MSDN 기사 "C # 2.0 언어 및 컴파일러 의 새로운 기능 " 및 " Visual C # 2005의 새로운 기능 "을 비교하면 컴파일러 버전 번호에 따라 "C # major_version.minor_version"이 만들어지는 것으로 추론 할 수 있습니다.

거기 C # 1.2 .NET 1.1 VS 2003에 대응 하며로 명명 카메라 C # 1 .NET 2003 .

그러나 Microsoft는 마이너 버전 (점 뒤)을 늘리거나 0 이외의 숫자를 갖기 위해 더 이상 중단하지 않았습니다 0. .NET 3.5에 해당하는 C #은 msdn.microsoft.com에서 "Visual C # 2008 Service Pack 1" 로 명명됩니다 .

주요 .NET / 컴파일러 버전 번호 매기기 및 Visual Studio 번호 매기기의 두 가지 병렬 명명이 있습니다.

C # 2.0Visual C # 2005 의 동의어입니다.

C # 3.0은 다음에 해당하거나보다 정확하게 타겟팅 할 수 있습니다.


3
아니요. .NET 3.5에 해당하는 C #의 번호를 실제로 사용하려면 "Visual C # 2008"이라고합니다. C # 3.0 기능은 "Visual C # 2008"에 도입되었으므로 연결된 페이지에서 "Visual C # 2008의 최초 릴리스 버전의 새로운 기능"에 있습니다. 예를 들어, Mono로 빌드 할 때는 거의 의미가 없으므로 Visual Studio 버전 번호를 사용하는 것은 일반적으로 좋지 않습니다. C # 언어에는 버전 번호가 잘 지정되어 있습니다. 어떤 Visual C # 제품이 해당 버전의 C #을 처음 도입했는지는 알지만 같은 것은 아닙니다.
Jon Skeet

@JonSkeet, 아뇨. 귀하와 다른 답변자에게 귀하의 답변을 업데이트하도록 요청하고 싶었지만 내 의견이 너무 길어서 답변으로 결정했습니다. 정보를 주셔서 감사합니다
Gennady Vanin Геннадий Ванин

C # 3.0을 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 버전 15.3

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

C # 7.2-Visual Studio 2017 버전 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 버전 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 및 Visual Studio 2019 버전 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

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


2

C # 8.0은 최신 버전의 c # .it이며 .NET Core 3.x 이상 버전에서만 지원됩니다. 최신 기능을 많이 사용하려면 .NET Core 3.x에 도입 된 라이브러리 및 런타임 기능이 필요합니다.

다음 표는 버전 및 기본 C # 버전이있는 대상 프레임 워크를 보여줍니다.

대상 프레임 워크가있는 C # 언어 버전

소스-C # 언어 버전 관리


"많은 최신 기능에는 .NET Core 3.x에 도입 된 라이브러리 및 런타임 기능이 필요합니다." 기본 메소드 구현에는 실제로 런타임 지원이 필요하며, 주석이있는 프레임 워크를 대상으로 할 때 널 입력 가능 참조 유형이 더 잘 작동하지만이 기능은 전체적으로 작동하지 않습니다.
Jon Skeet
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.