Eventos
Crie aplicativos e agentes de IA
17 de mar., 21 - 21 de mar., 10
Junte-se à série de encontros para criar soluções de IA escaláveis com base em casos de uso do mundo real com outros desenvolvedores e especialistas.
Registrar agoraNão há mais suporte para esse navegador.
Atualize o Microsoft Edge para aproveitar os recursos, o suporte técnico e as atualizações de segurança mais recentes.
Este artigo fornece um histórico de cada versão principal da linguagem C#. A equipe C# continua a inovar e a adicionar novos recursos. Os status detalhados do recurso de linguagem, incluindo os recursos considerados para as versões futuras, podem ser encontrados no repositório dotnet/roslyn no GitHub. Para descobrir quando um recurso específico foi adicionado ao idioma, consulte o arquivo do histórico de versões em C# no repositório dotnet/csharplang
no GitHub.
Importante
A linguagem C# depende de tipos e métodos nos quais a especificação C# é definida como uma biblioteca padrão para alguns dos recursos. A plataforma .NET fornece esses tipos e métodos em alguns pacotes. Um exemplo é o processamento de exceção. Cada instrução ou expressão throw
é verificada para garantir que o objeto que está sendo gerado é derivado de Exception. Da mesma forma, cada catch
é verificado para garantir que o tipo que está sendo capturado é derivado de Exception. Cada versão pode adicionar novos requisitos. Para usar os recursos de linguagem mais recentes em ambientes mais antigos, talvez seja necessário instalar bibliotecas específicas. Essas dependências estão documentadas na página de cada versão específica. Saiba mais sobre as relações entre linguagem e biblioteca para obter informações sobre essa dependência.
Lançado em novembro de 2024
O C# 13 inclui os novos recursos a seguir:
params
: o modificador params
não está limitado a tipos de matrizes. Agora, você pode usar params
com qualquer tipo de coleção reconhecido, incluindo Span<T>
, assim como tipos de interface.lock
: se um lock
for o destino de uma instrução System.Threading.Lock, o compilador gerará o código para usar o método Lock.EnterScope() para inserir um escopo exclusivo. O ref struct
retornado dá suporte ao padrão Dispose()
para sair do escopo exclusivo.\e
: você pode usar \e
como uma sequência de escape de caractere literal para o caractere ESCAPE
, Unicode U+001B
.^
, agora é permitido em uma expressão de inicializador de objeto.ref
e contextos unsafe
em iteradores e métodos assíncronos.ref struct
para implementar interfaces.ref struct
como argumentos para parâmetros de tipo em tipos genéricos.partial
.E a palavra-chave contextual field
para acessar o campo de backup gerado pelo compilador em uma propriedade implementada automaticamente foi lançada como uma versão prévia do recurso.
Lançado em novembro de 2023
Os seguintes recursos foram adicionados no C# 12:
class
ou struct
...e
), para expandir qualquer coleção.struct
.ref readonly
parâmetros - ref readonly
– permitem mais clareza para APIs que possam estar usando parâmetros ref
ou parâmetros in
.using
para alias de qualquer tipo, não apenas tipos nomeados.E Interceptores – foi lançado como Versão prévia do recurso.
No geral, o C# 12 fornece novos recursos que tornam você mais produtivo ao escrevercódigo C#. A sintaxe que você já conhecia está disponível em mais locais. Outra sintaxe permite consistência para conceitos relacionados.
Lançado em novembro de 2022
Os seguintes recursos foram adicionados em C# 11:
Span<char>
em uma constante string
nameof
ref
Campos e scoped ref
O C# 11 apresenta matemática genérica e vários recursos que dão suporte a essa meta. Você pode escrever algoritmos numéricos uma vez para todos os tipos de número. Há mais recursos para facilitar o trabalho com os tipos de struct
, como membros necessários e structs de padrão automático. O trabalho com cadeias de caracteres fica mais fácil com literais de cadeia de caracteres brutas, nova linha em interpolações de cadeia de caracteres e literais de cadeia de caracteres UTF-8. Recursos como os tipos de locais de arquivo permitem que os geradores de origem sejam mais simples. Por fim, os padrões de lista adicionam mais suporte para correspondência de padrões.
Lançado em novembro de 2021
O C# 10 adiciona os seguintes recursos e aprimoramentos à linguagem C#:
global using
Diretivas const
as cadeias de caracteres podem ser inicializadas usando a interpolação de cadeia de caracteres se todos os espaços reservados forem cadeias de caracteres constantes.sealed
modificador ao substituir ToString
em um tipo de registro.AsyncMethodBuilder
em métodos#line
.Mais recursos estavam disponíveis no modo de visualização. Para usar esses recursos, você deve definir <LangVersion>
como Preview
em seu projeto:
C# 10 continua trabalhando em temas de remoção de cerimônia, separação de dados de algoritmos e aprimoramento do desempenho para o Runtime do .NET.
Muitos dos recursos significam que você digitará menos código para expressar os mesmos conceitos. Structs de registro sintetizam muitos dos mesmos métodos que as classes de registro. Structs e tipos anônimos dão suporte a expressões. Diretivas de uso global e declarações de namespace com escopo de arquivo significam expressar dependências e organização de namespace com mais clareza. Melhorias lambda facilitam a declaração de expressões lambda onde são usadas. Novos padrões de propriedade e melhorias de desconstrução criam um código mais conciso.
Os novos manipuladores de cadeia de caracteres interpolados e o comportamento AsyncMethodBuilder
podem melhorar o desempenho. Esses recursos de linguagem foram aproveitados no .NET Runtime para obter aprimoramentos de desempenho no .NET 6.
C# 10 também marca uma mudança para a cadência anual de versões do .NET. Como nem todos os recursos podem ser concluídos em um período anual, você pode experimentar alguns recursos de "versão prévia" no C# 10. Os atributos genéricos e os membros abstratos estáticos em interfaces podem ser usados, mas eles são versões prévias do recurso e podem ser alterados antes da versão final.
Lançado em novembro de 2020
C# 9 foi lançada com o .NET 5. É a versão de linguagem padrão para qualquer assembly direcionado à versão do .NET 5. Ela contém os seguintes recursos novos e aprimorados:
C# 9 continua três dos temas de versões anteriores: remoção da cerimônia, separação dos dados de algoritmos e fornecimento de mais padrões em mais lugares.
Instruções de nível superior significam que seu programa principal é mais simples de ler. Há menos necessidade de cerimônia: um namespace, uma classe Program
e static void Main()
são todos desnecessários.
A introdução de records
fornece uma sintaxe concisa para tipos de referência que seguem semântica de valor para manter a igualdade. Você usará esses tipos para definir contêineres de dados que normalmente definem o comportamento mínimo. Os setters somente init fornecem o recurso de mutação não destrutiva (expressões with
) nos registros. C# 9 também adiciona tipos de retorno covariantes para que os registros derivados possam substituir métodos virtuais e retornar um tipo derivado do tipo de retorno do método base.
Os recursos de padrões correspondentes foram expandidos de várias maneiras. Agora, os tipos numéricos dão suporte aos padrões de intervalo. Os padrões podem ser combinados usando padrões and
, or
e not
. É possível adicionar parênteses para esclarecer padrões mais complexos:
O C# 9 inclui novas melhorias de correspondência de padrões:
and
exigem que ambos os padrões correspondamor
exigem que ambos os padrões correspondamnot
exigem que ambos os padrões correspondamEsses padrões enriquecem a sintaxe para padrões. Um dos usos mais comuns é uma nova sintaxe para uma verificação nula:
if (e is not null)
{
// ...
}
Qualquer um desses padrões pode ser usado em qualquer contexto em que os padrões são permitidos: expressões de padrão is
, expressõesswitch
, padrões aninhados e o padrão de uma instrução switch
do rótulo case
.
Outro conjunto de recursos dá suporte à computação de alto desempenho em C#:
nint
e nuint
modelam os tipos inteiros de tamanho nativo na CPU de destino.localsinit
pode ser omitida para salvar instruções.Outro conjunto de aprimoramentos dá suporte a cenários em que os geradores de código adicionam funcionalidade:
C# 9 adiciona muitos outros pequenos recursos que melhoram a produtividade do desenvolvedor, escrevendo e lendo código:
new
de tipo de destinostatic
GetEnumerator()
de extensão para loops foreach
A versão C# 9 continua o trabalho para manter C# uma linguagem de programação moderna e de uso geral. Os recursos continuam a dar suporte a cargas de trabalho e tipos de aplicativo modernos.
Lançado em setembro de 2019
C# 8.0 é a primeira grande versão em C# que tem como destino especificamente o .NET Core. Alguns recursos dependem de novos recursos de Common Language Runtime (CLR), outros, de tipos de biblioteca adicionados somente no .NET Core. O C# 8.0 adiciona os seguintes recursos e aprimoramentos à linguagem C#:
Os membros de interface padrão exigem aprimoramentos na CLR. Esses recursos foram adicionados na CLR para .NET Core 3.0. Intervalos e índices, além de fluxos assíncronos, exigem novos tipos nas bibliotecas do .NET Core 3.0. Tipos de referência anuláveis, implementados no compilador, são muito mais úteis quando bibliotecas são anotadas para fornecer informações semânticas sobre o estado nulo de argumentos e valores retornados. Essas anotações estão sendo adicionadas nas bibliotecas do .NET Core.
Lançado em maio de 2018
Há dois temas principais para a versão C# 7.3. Um tema fornece recursos que permitem que o código seguro tenha o mesmo desempenho que o código não seguro. O segundo tema fornece melhorias incrementais aos recursos existentes. Novas opções do compilador também foram adicionadas a essa versão.
Os novos recursos a seguir são compatíveis com o tema de melhor desempenho para código seguro:
ref
.stackalloc
.fixed
com qualquer tipo compatível com um padrão.Os seguintes recursos e aprimoramentos foram feitos nos recursos existentes:
==
e !=
com tipos de tupla.in
foi aprimorada.As novas opções do compilador são:
-publicsign
para habilitar a assinatura de Software de código aberto (OSS) de assemblies.-pathmap
para fornecer um mapeamento para diretórios de origem.Lançado em novembro de 2017
C# 7.2 adicionou vários recursos de linguagem menores:
stackalloc
.fixed
com qualquer tipo compatível com um padrão.ref
.readonly struct
, para indicar que uma struct é imutável e deve ser passada como um parâmetro in
para seus métodos de membro.in
em parâmetros, para especificar que um argumento seja passado por referência, mas não modificado pelo método chamado.ref readonly
nos retornos de método, para indicar que um método retorna seu valor por referência, mas não permite gravações nesse objeto.ref struct
, para indicar que um tipo de struct acessa a memória gerenciada diretamente e deve sempre ser alocado por pilha.private protected
modificadores de acesso: private protected
permite o acesso a classes derivadas no mesmo assembly.ref
condicionais: ?:
) agora já pode ser uma referência.Lançado em agosto de 2017
C# começou a lançar versões de ponto com C# 7.1. Essa versão adiciona a o elemento de configuração de seleção de versão da linguagem, três novos recursos de linguagem e um novo comportamento do compilador.
Os novos recursos de linguagem nesta versão são:
async
Main
método
async
.default
Expressões literais
Por fim, o compilador traz duas opções -refout
e -refonly
, que controlam a geração de assembly de referência.
Lançado em março de 2017
A versão 7.0 de C# foi lançada com o Visual Studio 2017. Esta versão tem algumas coisas interessantes e evolutivas na mesma direção que o C# 6.0. Aqui estão alguns dos novos recursos:
Outros recursos incluíam:
Todas essas funcionalidades oferecem novos recursos para desenvolvedores e a oportunidade de escrever um código mais limpo do que nunca. Um ponto alto é a condensação da declaração de variáveis a serem usadas com a palavra-chave out
e a permissão de vários valores retornados por meio de tupla. Agora o .NET Core tem qualquer sistema operacional como destino e tem a visão firme na nuvem e na portabilidade. Essas novas funcionalidades certamente ocupam a mente e o tempo dos designers da linguagem, além de levarem a novos recursos.
Lançado em julho de 2015
A versão 6.0, lançada com o Visual Studio 2015, trouxe muitos recursos menores que tornaram a programação em C# mais produtiva. Eis algumas delas:
Outros novos recursos incluem:
Mas, se você os observar em conjunto, verá um padrão interessante. Nesta versão, o C# começou a eliminar o clichê de linguagem para tornar o código mais conciso e legível. Portanto, para os fãs de código simples e conciso, essa versão da linguagem foi um grande benefício.
Fizeram ainda outra coisa com esta versão, embora não seja um recurso de linguagem tradicional em si. Lançaram Roslyn, o compilador como um serviço. Agora o compilador de C# é escrito em C#, e você pode usar o compilador como parte de seus esforços de programação.
Lançado em agosto de 2012
A versão 5.0 de C#, lançada com o Visual Studio 2012, era uma versão focada da linguagem. Quase todo o esforço para essa versão foi dedicado a outro conceito inovador de linguagem: os modelos async
e await
para programação assíncrona. Aqui está a lista dos recursos principais:
O atributo de informações do chamador permite facilmente recuperar informações sobre o contexto no qual você está executando sem recorrer a uma infinidade de código de reflexão clichê. Ele tem muitos usos em diagnóstico e tarefas de registro em log.
Mas async
e await
são as verdadeiras estrelas dessa versão. Quando esses recursos foram lançados em 2012, o C# virou o jogo novamente, implantando a assincronia na linguagem como uma participante da maior importância.
Lançado em abril de 2010
O C# versão 4.0, lançado com o Visual Studio 2010, introduziu alguns novos recursos interessantes:
Tipos de interoperabilidade inseridos facilitaram os problemas de implantação da criação de assemblies de interoperabilidade COM para seu aplicativo. A contravariância e a covariância genérica oferecem maior capacidade para usar genéricos, mas eles são um tanto acadêmicos e provavelmente mais apreciados por autores de estruturas e bibliotecas. Os parâmetros nomeados e opcionais permitem eliminar várias sobrecargas de método e oferecem conveniência. Mas nenhum desses recursos é exatamente uma alteração de paradigma.
O recurso principal foi a introdução da palavra-chave dynamic
. A palavra-chave dynamic
introduziu na versão 4.0 do C# a capacidade de substituir o compilador na tipagem em tempo de compilação. Com o uso da palavra-chave dinâmica, você pode criar constructos semelhantes a linguagens dinamicamente tipadas, como JavaScript. Você pode criar um dynamic x = "a string"
e, em seguida, adicionar seis a ela, deixando que o runtime decida o que acontece em seguida.
Associação dinâmica tem potencial de erros, mas também grande eficiência na linguagem.
Lançado em novembro de 2007
O C# versão 3.0 chegou no final de 2007, juntamente com o Visual Studio 2008, porém o pacote completo de recursos de linguagem veio, na verdade, com o C# versão 3.5. Esta versão foi o marco de uma alteração significativa no crescimento do C#. Ela estabeleceu o C# como uma linguagem de programação realmente formidável. Vamos dar uma olhada em alguns recursos importantes nesta versão:
Numa retrospectiva, muitos desses recursos parecerem inevitáveis e inseparáveis. Todos eles se encaixam estrategicamente. O melhor recurso dessa versão do C# era a expressão de consulta, também conhecida como Consulta Integrada à Linguagem (LINQ).
Uma exibição mais detalhada analisa árvores de expressão, expressões lambda e tipos anônimos como a base na qual o LINQ é construído. Mas, de uma forma ou de outra, o C# 3.0 apresentou um conceito revolucionário. O C# 3.0 começou a definir as bases para transformar o C# em uma linguagem híbrida orientada a objeto e funcional.
Especificamente, agora você pode escrever consultas declarativas no estilo SQL para executar operações em coleções, entre outras coisas. Em vez de escrever um loop for
para calcular a média de uma lista de inteiros, agora você pode fazer isso simplesmente como list.Average()
. A combinação de expressões de consulta e métodos de extensão tornou uma lista de inteiros muito mais inteligente.
Lançado em novembro de 2005
Vamos dar uma olhada em alguns recursos principais do C# 2.0, lançado em 2005, junto com o Visual Studio 2005:
Outros recursos do C# 2.0 adicionaram funcionalidades a recursos existentes:
Embora C# possa ter começado como uma linguagem orientada a objeto (OO) genérica, a versão 2.0 do C# tratou de mudar isso rapidamente. Com genéricos, tipos e métodos podem operar em um tipo arbitrário enquanto ainda mantêm a segurança de tipos. Por exemplo, ter um List<T> permite que você tenha List<string>
ou List<int>
e execute operações fortemente tipadas nessas cadeias de caracteres ou inteiros enquanto itera neles. Usar genéricos é melhor do que criar um ListInt
que deriva de ArrayList
ou converter de Object
para cada operação.
A versão 2.0 do C# trouxe iteradores. Em resumo, o iteradores permitem que você examine todos os itens em um List
(ou outros tipos Enumeráveis) com um loop foreach
. Ter iteradores como uma parte importante da linguagem aprimorou drasticamente a legibilidade da linguagem e a capacidade das pessoas de raciocinar a respeito do código.
Lançado em abril de 2003
C# versão 1.2 fornecida com o Visual Studio .NET 2003. Ele continha algumas pequenas melhorias na linguagem. Muito notável é que, a partir desta versão, o código gerado em um loop foreach
chamou Dispose, em um IEnumerator, quando o IEnumerator implementou IDisposable.
Lançado em janeiro de 2002
Ao olhar para trás, a versão 1.0 de C#, lançada com o Visual Studio .NET 2002, ficou muito parecida com o Java. Como parte de suas metas de design declaradas para ECMA, ela procurou ser uma "linguagem simples, moderna e orientada a objetos para uso geral". Na época, parecer com Java significava que havia atingido essas metas de design iniciais.
Mas agora, se examinar novamente a C# 1.0, você poderá se sentir um pouco confuso. Carecia das funcionalidades assíncronas internas e algumas das funcionalidades relacionadas a genéricos que você nem valoriza. Na verdade, ela não tinha nada relacionado a genéricos. E a LINQ? Ainda não estava disponível. Essas adições levariam alguns anos para sair.
A versão 1.0 do C# parecia ter poucos recursos, em comparação com os dias de hoje. Você teria que escrever código um tanto detalhado. Mas, ainda assim, você poderia iniciar em algum lugar. A versão 1.0 do C# era uma alternativa viável ao Java na plataforma Windows.
Os principais recursos do C# 1.0 incluíam:
Artigopublicado originalmente no blog NDepend, cortesia de Erik Dietrich e Patrick Smacchia.
Comentários do .NET
O .NET é um projeto código aberto. Selecione um link para fornecer comentários:
Eventos
Crie aplicativos e agentes de IA
17 de mar., 21 - 21 de mar., 10
Junte-se à série de encontros para criar soluções de IA escaláveis com base em casos de uso do mundo real com outros desenvolvedores e especialistas.
Registrar agoraTreinamento
Roteiro de aprendizagem
Criar e executar aplicativos de console C# simples (Introdução ao C#, Parte 2) - Training
Usar o Visual Studio Code para desenvolver aplicativos de console C# que implementem matrizes, loops foreach e instruções if.