Quais são os números de versão corretos para C #?


2532

Quais são os números de versão corretos para C #? O que saiu quando? Por que não consigo encontrar respostas sobre o C # 3.5 ?

Esta pergunta é principalmente para ajudar aqueles que estão procurando uma resposta usando um número de versão incorreto, por exemplo, C # 3.5 . A esperança é que alguém que não encontre uma resposta com o número de versão errado encontre essa pergunta e pesquise novamente com o número de versão correto.


74
Esta é uma das boas fontes para entender tudo. en.wikipedia.org/wiki/C_Sharp_(programming_language)

1
Esse segundo parágrafo não deveria estar em um comentário, e não na pergunta, já que não faz parte da pergunta
TankorSmash

21
@TankorSmash: Eu acho que é suficientemente importante como contexto da pergunta que vale a pena manter onde está. IMO, é claro.
precisa saber é o seguinte

Respostas:


2874

Histórico de versão do idioma C #:

Estas são as versões do C # conhecidas no momento em que este artigo foi escrito:

Em resposta à pergunta do OP:

Quais são os números de versão corretos para C #? O que saiu quando? Por que não consigo encontrar respostas sobre o C # 3.5?

Não existe C # 3.5 - a causa da confusão aqui é que o C # 3.0 está presente no .NET 3.5. A linguagem e a estrutura são versionadas independentemente, no entanto - como é o CLR, que está na versão 2.0 para .NET 2.0 a 3.5, .NET 4 que introduz o CLR 4.0, service packs, não obstante. O CLR no .NET 4.5 possui várias melhorias, mas o controle de versão não é claro: em alguns lugares, pode ser chamado de CLR 4.5 ( esta página do MSDN costumava se referir a ela dessa maneira, por exemplo), mas a Environment.Versionpropriedade ainda reporta 4.0. xxx.

Em 3 de maio de 2017, a equipe de idiomas do C # criou um histórico de versões e recursos de C # em seu repositório GitHub: Recursos adicionados nas versões de idiomas do C # . Há também uma página que rastreia os recursos de idioma futuros e implementados recentemente .


26
Para quem sugeriu incluir coleções simultâneas: esta é uma lista de recursos de idioma , não de estrutura . Observe a falta de mencionar WPF, etc.
Jon Skeet

3
@nawfal: Roslyn é irrelevante para isso - e o .NET nativo é um pouco separado. Mas, basicamente, sim, eu acredito que ainda é 4.
Jon Skeet

3
@nawfal: Nenhuma das alterações de idioma precisa de alterações de CLR.
Jon Skeet

9
@alper: O Unity não seria uma versão específica do C #, mas uma versão específica do .NET framework e / ou tempo de execução. IIRC, está efetivamente no CLR v2, mas pode ter alguns aspectos do .NET 3.5.
precisa

3
@markmnl: Geralmente, um projeto não possui um número de versão C # especificado ... você pode abrir o mesmo projeto em diferentes versões do Visual Studio e encontrar o mesmo código que funciona em um, mas não em outro. Você pode limitar a versão C #, embora isso seja feito de maneira sintática e não semântica. Mas sim, se você criar um projeto visando .NET 4 em Visual Studio 2015, você pode usar a maioria dos C # 6 recursos ...
Jon Skeet

328

É o mesmo que a maioria das respostas aqui, mas tabularizadas para facilitar, e possui versões do Visual Studio e .NET para garantir a integridade.

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

Nota: Atualmente, o desenvolvimento do .NET é praticamente independente do VS, não há correlação entre as versões de cada um.
Consulte " Versões e dependências do .NET Framework " para obter mais informações.


7
E as versões do .NET Core?
precisa saber é

1
@ Pac0 O desenvolvimento do .NET Core é praticamente independente do desenvolvimento do VS e é difícil acompanhar (sendo de código aberto). De fato, todos os VS, .NET e .NET Core estão repetindo rapidamente.
Nawfal 6/02


303

O maior problema ao lidar com os números de versão do C # é o fato de ele não estar vinculado a uma versão do .NET Framework, o que parece dever-se às liberações sincronizadas entre o Visual Studio e o .NET Framework.

A versão do C # está realmente vinculada ao compilador, não à estrutura. Por exemplo, no Visual Studio 2008, você pode escrever C # 3.0 e direcionar o .NET Framework 2.0, 3.0 e 3.5. A nomenclatura C # 3.0 descreve a versão da sintaxe do código e os recursos suportados da mesma maneira que ANSI C89, C90, C99 descreve a sintaxe do código / recursos para C.

Dê uma olhada no Mono e você verá que o Mono 2.0 (versão 2.0 do .NET Framework implementada principalmente nas especificações da ECMA) oferece suporte à sintaxe e aos recursos do C # 3.0.


195
  • C # 1.0 com o Visual Studio.NET

  • C # 2.0 com o Visual Studio 2005

  • C # 3.0 com o Visual Studio 2008

  • C # 4.0 com o Visual Studio 2010

  • C # 5.0 com Visual Studio 2012

  • C # 6.0 com o Visual Studio 2015

  • C # 7.0 com Visual Studio 2017

  • C # 8.0 com o Visual Studio 2019


83

VERSÃO_____ ESPECIFICAÇÃO DO ______COMPUTADOR MICROSOFT

C # 1.0 / 1.2 de____ dezembro de 2001 ? / 2003 ? ___________Janeiro de 2002 ?

C # 2.0 _______setembro de 2005________________ novembro de 2005 ?

C # 3.0 _______maio de 2006_____________________ novembro de 2006 ?

C # 4.0 _______março de 2009 (rascunho)______________ abril de 2010 ?

C # 5.0; lançado com o .NET 4.5 em agosto de 2012

C # 6.0; lançado com o .NET 4.6 2015

C # 7.0; lançado com o .NET 4.7 2017

C # 8.0; lançado com o .NET 4.8 2019


8
De onde você obteve uma especificação de linguagem C # 2.0 em dezembro de 2002? Da mesma forma C # 4 em junho de 2006? Tem certeza de que não está falando de edições ECMA, que são completamente diferentes?
Jon Skeet


64

Histórico de versões em C #:

C # é uma linguagem de programação simples e poderosa, orientada a objetos, desenvolvida pela Microsoft.

O C # evoluiu muito desde seu primeiro lançamento em 2002. O C # foi introduzido com o .NET Framework 1.0.

A tabela a seguir lista os recursos importantes introduzidos em cada versão do C #.

E a versão mais recente do C # está disponível nas versões do C # .

1 :insira a descrição da imagem aqui


54

Resumi a maioria das versões nesta tabela. Os únicos ausentes devem ser as versões do ASP.NET Core. Também adicionei versões diferentes do ASP.NET MVC.

Observe que o ASP.NET 5 foi renomeado como ASP.NET Core 1.0 e ASP.NET MVC 6 foi renomeado como ASP.NET Core MVC 1.0.0. Acredito que essa alteração ocorreu por volta de janeiro de 2016.

Incluí a data de lançamento do ASP.NET 5 RC1 na tabela, mas ainda não incluí o ASP.NET core 1.0 e outras versões principais, porque não consegui encontrar as datas exatas de lançamento. Você pode ler mais sobre as datas de lançamento do ASP.NET Core aqui: Quando o ASP.NET Core 1.0 (ASP.NET 5 / vNext) está programado para lançamento?

Versão


1
Não tenho certeza de que ter o MVC na mesma tabela seja útil, para ser sincero ... é apenas um cronograma de lançamento separado, efetivamente.
Jon Skeet

@ Jon Isso é verdade, basta adicioná-lo aqui para qualquer pessoa que precise, porque tentei descobrir as datas de lançamento correspondentes dos frameworks .NET, para que eu entenda melhor todo o histórico da versão.
Mindless


37

Comparando os artigos do MSDN "O que há de novo no idioma e compilador C # 2.0" e " O que há de novo no Visual C # 2005 ", é possível deduzir que "C # major_version.minor_version" é cunhado de acordo com a numeração da versão do compilador.

C # 1.2 correspondente ao .NET 1.1 e VS 2003 e também chamado Visual C # .NET 2003 .

Mais adiante, porém, a Microsoft parou para incrementar os números da versão menor (depois do ponto) ou para tê-los além de zero 0,. Embora seja necessário observar que o C # correspondente ao .NET 3.5 é nomeado em msdn.microsoft.com como "Visual C # 2008 Service Pack 1" .

Existem duas nomeações paralelas: por numeração de versão principal do .NET / compilador e por numeração do Visual Studio.

C # 2.0 é sinônimo de Visual C # 2005

O C # 3.0 corresponde (ou, mais corretamente, pode ser direcionado) a:


3
Não, o C # correspondente ao .NET 3.5 é denominado "Visual C # 2008" se você realmente deseja usar essa numeração. Os recursos do C # 3.0 foram introduzidos no "Visual C # 2008" e, por isso, na página em que você está vinculado, eles estão em "O que há de novo na versão original do Visual C # 2008". No entanto, usar os números de versão do Visual Studio geralmente é uma péssima idéia, pois faz muito pouco sentido quando você está construindo com o Mono, por exemplo. A linguagem C # possui números de versão bem especificados ... sabemos qual produto do Visual C # originalmente introduziu essa versão do C #, mas eles não são a mesma coisa.
Jon Skeet

@ JonSkeet, não, eu não. Queria perguntar a você (e a outro respondente) que atualize sua resposta, mas desde que meu comentário se tornou muito longo, decidi colocar como resposta. Obrigado pela sua informação
Gennady Vanin Геннадий Ванин

Eu não acho que C # 3.0 pode ser executado em 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 versão 15.3

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

C # 7.2 - Visual Studio 2017 versão 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 versão 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 e Visual Studio 2019 versão 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

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


2

O C # 8.0 é a versão mais recente do c # .it é suportado apenas no .NET Core 3.xe versões mais recentes. Muitos dos recursos mais recentes exigem recursos de biblioteca e tempo de execução introduzidos no .NET Core 3.x

A tabela a seguir lista a estrutura de destino com a versão e sua versão C # padrão.

Versão da linguagem C # com estrutura de destino

Origem - controle de versão em linguagem C #


"Muitos dos recursos mais recentes exigem recursos de biblioteca e tempo de execução introduzidos no .NET Core 3.x" - não tantos, na verdade. A implementação do método padrão realmente requer suporte ao tempo de execução, e os tipos de referência nulos definitivamente funcionam melhor ao direcionar uma estrutura com anotações, mas o recurso funciona em geral sem isso.
Jon Skeet
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.