Hoje vou apresentar um resumo sobre as versões da linguagem C# e os principais recursos que cada versão trouxe. |
As linguagens
de programação são muito parecidas com as linguagens humanas, elas evoluem e vão
incorporando novos termos e novos recursos. Com o C# não é diferente e a seguir
temos um resumo da evolução da linguagem iniciando com o C# 1.0 até o C# 11.
O C# 1.0 foi lançado em 2002 e incluía todos os recursos importantes de uma linguagem moderna orientada a objetos estaticamente tipada, como você verá ao longo dos Capítulos 2 a 6.
O C# 2.0 foi lançado em 2005 e focado em habilitar a tipagem forte de dados usando Generics, para melhorar o desempenho do código e reduzir erros de tipo, incluindo os tópicos listados na tabela a seguir:
Recurso |
Descrição |
Nullable value types |
Tornar um tipo de valor anulável |
Generics |
Tornar os tipos mais reutilizáveis com genéricos |
O C# 3.0 foi lançado em 2007 e focado em habilitar a codificação declarativa com Language INtegrated Queries (LINQ) e recursos relacionados, como tipos anônimos e expressões lambda, incluindo os tópicos listados na tabela a seguir:
Recurso |
Descrição |
Implicitly typed local variables |
Inferindo o tipo da variável local |
LINQ |
Consulta e manipulação de dados usando LINQ |
O C# 4.0 foi lançado em 2010 e focado em melhorar a interoperabilidade com linguagens dinâmicas como F# e Python, incluindo os tópicos listados na tabela a seguir:
Recurso |
Descrição |
Dynamic types |
Armazenar tipos dinâmicos |
Named/optional arguments |
Parâmetros opcionais e argumentos nomeados |
O C# 5.0 foi lançado em 2012 e se concentrava na simplificação do suporte à operação assíncrona, implementando automaticamente máquinas de estado complexo enquanto escrevia o que parecia ser instruções síncronas, incluindo os tópicos listados na tabela a seguir:
Recurso |
Descrição |
Asynchronous tasks |
Suporte a operações assíncronas com async e await |
O C# 6.0 foi lançado em 2015 e focado em pequenos refinamentos para a linguagem, incluindo os tópicos listados na tabela a seguir:
Recurso |
Descrição |
static imports |
Simplificando o uso do console |
Interpolated strings |
Exibindo a saída do usuário |
Expression bodied members |
Definindo propriedades somente leitura |
O C# 7.0 foi lançado em março de 2017 e focado na adição de recursos de linguagem funcional, como tuplas e correspondência de padrões, bem como pequenos refinamentos para a linguagem, incluindo os tópicos listados na tabela a seguir:
Recurso |
Descrição |
Binary literals and digit separators |
Armazenando números inteiros |
Pattern matching |
Correspondência de padrões |
out variables |
Controlando como os parâmetros são passados |
Tuples |
Combinando vários valores com tuplas |
Local functions |
Definindo funções locais |
O C# 7.1 foi lançado em agosto de 2017 e focado em pequenos refinamentos para a linguagem, incluindo os tópicos listados na tabela a seguir:
Recurso |
Descrição |
Default literal expressions |
Configurando campos com literal padrão |
Inferred tuple element names |
Inferindo nomes de tuplas |
async Main |
Melhorar a resposta de aplicações Console |
O C# 7.2 foi lançado em novembro de 2017 e focado em pequenos refinamentos para a linguagem, incluindo os tópicos listados na tabela a seguir:
Recurso |
Descrição |
Leading underscores in numeric literals |
Armazenando números inteiros |
Non-trailing named arguments |
Argumentos nomeados não finais |
private protected access modifier |
Modificadores de acesso |
== e != com tipos tuplas |
Comparando tuplas |
O C# 7.3 foi lançado em maio de 2018 e focado em código seguro orientado para desempenho que melhora variáveis ref, ponteiros e stackalloc.
O C# 8 foi lançado em setembro de 2019 e focado em uma grande mudança na linguagem relacionada ao tratamento de nulos, incluindo os tópicos listados na tabela a seguir:
Recurso |
Descrição |
Nullable reference types |
Tornando um tipo de referência anulável |
Switch expressions |
Simplificando instruções switch com expressões switch |
Default interface methods |
Métodos de interface padrão |
O C# 9 foi lançado em novembro de 2020 e focado em tipos de registro, refinamentos para correspondência de padrões e aplicativos de console de código mínimo, incluindo os tópicos listados na tabela a seguir:
Recurso |
Descrição |
Minimal-code console apps |
Instruções de nível superior |
Target-typed new |
Usando o novo target-typed para instanciar objetos |
Enhanced pattern matching |
Correspondência de padrões com objetos |
Records |
Usando o tipo record |
O C# 10 foi lançado em novembro de 2021 e focado em recursos que minimizam a quantidade de código necessária em cenários comuns, incluindo os tópicos listados na tabela a seguir:
Recurso |
Descrição |
Global namespace imports |
Usando namespaces Global |
Constant string literals |
Formatando strings interpoladas |
File-scoped namespaces |
Simplificando a declaração de namespaces |
Required properties |
Definindo propriedades na instanciação |
Record structs |
Usar tipos record como uma struct |
Null parameter checks |
Verificando null nos parâmetros de métodos |
O C# 11 foi lançado em novembro de 2022 e apresenta a matemática genérica e vários recursos que oferecem suporte a esse objetivo. Você pode escrever algoritmos numéricos uma vez para todos os tipos de número. Há mais recursos para facilitar o trabalho com tipos structs, como membros obrigatórios e structs padrão automáticas.
Trabalhar com strings fica mais fácil com literais de string Raw, nova linha em interpolações de string e literais de string UTF-8. Recursos como tipos locais de arquivos 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.
E lá são vão 21 anos desde o lançamento da primeira versão...
E estamos conversados.
"Porque foi do
agrado do Pai que toda a plenitude nele habitasse,
E que, havendo por ele feito a paz pelo sangue da sua cruz, por meio dele
reconciliasse consigo mesmo todas as coisas, tanto as que estão na
terra, como as que estão nos céus."
Colossenses 1:19,20
Referências:
C# - Lendo e escrevendo em arquivos textos e binários
C# - Entendo o I/O na plataforma .NET
C# - Fluxo assíncrono ou async streams
C#- Apresentando Streams assíncronos