C #의 올바른 버전 번호는 무엇입니까?
C #의 올바른 버전 번호는 무엇입니까? 언제 나왔습니까? C # 3.5에 대한 답변을 찾을 수없는 이유는 무엇 입니까?
이 질문은 주로 C # 3.5 와 같이 잘못된 버전 번호를 사용하여 답변을 검색하는 사람들을 돕기위한 것 입니다. 잘못된 버전 번호로 답을 찾지 못한 사람은 이 질문을 찾은 다음 올바른 버전 번호로 다시 검색하기를 바랍니다.
답변
C # 언어 버전 기록 :
이 글을 쓰는 시점에 알려진 C # 버전은 다음과 같습니다.
- .NET 1.0 및 VS2002와 함께 릴리스 된 C # 1.0 (2002 년 1 월)
- C # 1.2 (이상하게도 충분 함); .NET 1.1 및 VS2003 (2003 년 4 월)과 함께 출시되었습니다. 를 구현 한를 호출
Dispose
하는 첫 번째 버전 입니다. 몇 가지 다른 작은 기능.IEnumerator
IDisposable
- .NET 2.0 및 VS2005와 함께 릴리스 된 C # 2.0 (2005 년 11 월). 주요 새 기능 : 제네릭, 익명 메서드, nullable 형식, 반복기 블록
- .NET 3.5 및 VS2008과 함께 릴리스 된 C # 3.0 (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에 의해 구현되었습니다 . 기능 : 자동으로 구현 된 속성에 대한 이니셜 라이저, 지시문을 사용하여 정적 멤버, 예외 필터, 요소 이니셜 라이저,
await
incatch
andfinally
,Add
컬렉션 이니셜 라이저의 확장 메서드 를 가져옵니다 . - .NET 4.7 및 VS2017과 함께 릴리스 된 C # 7.0 (2017 년 3 월). 주요 새로운 기능 : 튜플 , 참조 지역 및 참조 반환 , 패턴 일치 (패턴 기반 스위치 문 포함), 인라인 out매개 변수 선언 , 로컬 함수 , 이진 리터럴, 숫자 구분 기호 및 임의의 비동기 반환 .
- VS2017 v15.3 (2017 년 8 월)과 함께 릴리스 된 C # 7.1 새로운 기능 : async main , tuple member name inference , default expression , pattern matching with generics .
- VS2017 v15.5와 함께 릴리스 된 C # 7.2 (2017 년 11 월) 새로운 기능 : private protected access modifier , Span
, aka interior pointer, aka stackonly struct , 기타 모든 것 . - 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 . 주요 새로운 기능 : nullable 참조 유형 , 비동기 스트림 , 인덱스 및 범위 , 읽기 전용 멤버 , 선언 사용 , 기본 인터페이스 메서드 , 정적 로컬 함수 및 보간 된 축어 문자열 향상 .
- .Net 5.0 및 VS2019 v16.8 (2020 년 11 월)과 함께 릴리스 된 C # 9.0 . 주요 새 기능 : init 전용 속성 , 레코드 , with-expressions , 데이터 클래스, 위치 레코드, 최상위 프로그램 , 개선 된 패턴 일치 (단순 유형 패턴, 관계형 패턴, 논리 패턴), 개선 된 대상 유형 (대상 유형
new
표현식, 타겟 유형??
및?
), 공변 반환. 사소한 기능 : 정렬ref
및partial
수정 자 완화 , 매개 변수 null 검사, 람다 폐기 매개 변수, 네이티브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 # 언어 버전에 추가되었습니다 . 향후 및 최근에 구현 된 언어 기능을 추적하는 페이지 도 있습니다 .
이것은 여기의 대부분의 답변과 동일하지만 쉽게 표로 작성되었으며 완성도를 위해 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 ║
║ 9.0 ║ 2019(v16.8)║ 5.0^ ║ ^^ ║ Nov 2020 ║
╚════════════╩════════════╩══════════════╩═════════════╩══════════════╝
^-.NET 5.0은 .NET 프레임 워크의 최신 버전이 아니라 .NET Core 3입니다. .NET 5.0부터는 .NET 전체 프레임 워크의 최신 버전이 없습니다.
^^- .NET Core에 대한 별도의 CLR (CoreCLR) 버전은 없습니다. .NET Core 버전이 무엇이든 CoreCLR 버전입니다. 그래서 그것을 언급하지 않습니다.
참고 : .NET 개발은 요즘 VS와 거의 독립적이며 각 버전 간에는 상관 관계가 없습니다.
자세한 내용은 " .NET Framework 버전 및 종속성 "을 참조하십시오.
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 구문 및 기능을 지원한다는 것을 알 수 있습니다.
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
버전_____
언어 사양 ______
MICROSOFT 컴파일러
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와 함께 릴리스 됨
C # 버전 기록 :
C #은 Microsoft에서 개발 한 간단하고 강력한 개체 지향 프로그래밍 언어입니다.
C #은 2002 년 첫 번째 릴리스 이후 많은 발전을 이루었습니다. C #은 .NET Framework 1.0과 함께 도입되었습니다.
다음 표에는 C #의 각 버전에 도입 된 중요한 기능이 나열되어 있습니다.
최신 버전의 C #은 C # 버전 에서 사용할 수 있습니다 .
1 :
이 표에있는 대부분의 버전을 요약했습니다. 누락 된 유일한 버전은 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)은 언제 릴리스 예정입니까?
여기 에서 최신 C # 버전을 확인할 수 있습니다.
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.0 은 Visual C # 2005 의 동의어입니다.
C # 3.0은 다음에 해당합니다 (또는 더 정확하게는 타겟팅 할 수 있음).
- .NET 2.0 <==> Visual C # 2005
- .NET3.0 <==> Visual C # 2008
- .NET 3.5 <==> Visual C # 2008 서비스 팩 1
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-비주얼 스튜디오 2012
Asynchronous methods
Caller info attributes
C # 6-비주얼 스튜디오 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-비주얼 스튜디오 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
Version .NET Framework Visual Studio Important Features
C# 1.0 .NET Framework 1.0/1.1 Visual Studio .NET 2002
Basic features
C# 2.0 .NET Framework 2.0 Visual Studio 2005
Generics
Partial types
Anonymous methods
Iterators
Nullable types
Private setters (properties)
Method group conversions (delegates)
Covariance and Contra-variance
Static classes
C# 3.0 .NET Framework 3.0\3.5 Visual Studio 2008
Implicitly typed local variables
Object and collection initializers
Auto-Implemented properties
Anonymous types
Extension methods
Query expressions
Lambda expressions
Expression trees
Partial Methods
C# 4.0 .NET Framework 4.0 Visual Studio 2010
Dynamic binding (late binding)
Named and optional arguments
Generic co- and contravariance
Embedded interop types
C# 5.0 .NET Framework 4.5 Visual Studio 2012/2013
Async features
Caller information
C# 6.0 .NET Framework 4.6 Visual Studio 2013/2015
Expression Bodied Methods
Auto-property initializer
nameof Expression
Primary constructor
Await in catch block
Exception Filter
String Interpolation
C# 7.0 .NET Core 2.0 Visual Studio 2017
out variables
Tuples
Discards
Pattern Matching
Local functions
Generalized async return types
Numeric literal syntax improvements
C# 8.0 .NET Core 3.0 Visual Studio 2019
Readonly members
Default interface methods
Pattern matching enhancements:
Switch expressions
Property patterns
Tuple patterns
Positional patterns
Using declarations
Static local functions
Disposable ref structs
Nullable reference types
Asynchronous streams
Asynchronous disposable
Indices and ranges
Null-coalescing assignment
Unmanaged constructed types
Stackalloc in nested expressions
Enhancement of interpolated verbatim strings
C # 8.0은 최신 버전의 c #이며 .NET Core 3.x 이상 버전에서만 지원됩니다. 대부분의 최신 기능에는 .NET Core 3.x에 도입 된 라이브러리 및 런타임 기능이 필요합니다.
다음 표에는 버전 및 기본 C # 버전이있는 대상 프레임 워크가 나열되어 있습니다.
소스-C # 언어 버전 관리