Skip to main content

Novidades do C# 8



Em um video do Channel9, Mads Torgersen demonstra as primeiras quatro features do C# 8.

Nullable Reference Types

Já falamos sobre nullable references types no passado, mas resumindo: a idéia é que reference types (os tipos de referência) não seriam mais nulos por padrão. Em vez disso, você deve explicitamente marcá-los como nulos (anuláveis) usando a mesma sintaxe "Tipo?" Que você usa para nullable value types (tipos de valor anuláveis).
Atribuir um null a um tipo non-nullable resultará em um aviso de compilação. Da mesma forma, ao buscar um tipo null teremos um aviso de compilação, a menos que a variável em questão fosse explicitamente verificada por nulo previamente. Então, teoricamente, a única mudança que os desenvolvedores precisam fazer é não utilizar a sintaxe "Tipo?", quando apropriado.

Desde o nosso report, a nova sintaxe foi adicionada a esse recurso. Porém, pode haver um cenário onde você sabe que a variável nullable x não é realmente nula, mas você não pode provar isso para o compilador.

Neste caso, você pode usar x!.Method () para suprimir o aviso do compilador sobre possíveis exceções de referência nula.

Async Streams (também conhecidos como foreach async)

Async stream é equivalente assíncronos ao IEnumerable. Como reportado antes, async streams é utilizado desde 2015. Depois de muito debate a sintaxe estabelecida é:

foreach await (string s in asyncStream)

Ao definir um objeto async, usamos a seguinte assinatura:

async IAsyncEnumerable<T> MethodName()
Assim como em métodos IEnumerable, pode ser usado "yield return" para construir stream de objetos em uma lazy fashion.

O benefício de usar Async em vez de IObservable <T> de Extensões Reativas, é que o consumidor controla a taxa de fluxo. Isso é referido como um "pull model". Já o IObservable <T> é um "push mode", o que significa que o "Producer" pode inundar o "Consumer" com uma taxa de fluxo maior do que ele pode manipular.

Implementação de Interface Padrão

As implementações de interface padrão são essencialmente uma forma limitada de herança múltipla. Isso permitirá que interfaces abstratas definam completamente métodos, como classes abstratas. No entanto, as interfaces abstratas ainda não poderão declarar construtores ou atributos.

Nota: Você pode simular campos em uma interface usando ConditionalWeakTable.

O principal benefício das implementações de interface padrão é que você pode adicionar novos métodos a uma interface existente sem quebrar a compatibilidade inversa. Porém, isso não é garantido, pois só funcionaria quando um método padrão adequado for planejado.

Extension Everything

Um solicitação de longo tempo é ter a possibilidade de escrever métodos de extensão (extension methods) em C#, não somente propriedades de extensão. Na verdade, não há como sequer definir uma propriedade ou evento de extensão usando o padrão atual. Além disso, colocar métodos de extensão em classes estáticas parece "estranho" para muitas pessoas.

Sob o novo design, existe uma nova construção chamada "extension". Por exemplo, se você quiser criar métodos de extensão e propriedades para uma classe de Cliente, você escreveria:

extension CustomerExt extends Customer { 
//methods and properties go here 
}

Tal como acontece com as interfaces, não é possível definir campos de instância em extension, mas é possível simular usando ConditionalWeakTable. Também podem ser definidos campos estáticos.

Além de propriedades, eventos e sobrecargas de operadores, está sendo considerado permitir construtores de extensão (extension constructors). Os construtores de extensão seriam muito interessantes em factory e em cenários de pooling de objetos.

Extensions interfaces permitem adicionar novas interfaces em classes já existentes, também é uma tido como uma novidade. Esta, provavelmente, não será uma nova funcionalidade do C# 8, já que isso requer alterações no runtime.
Para maiores informações sobre o futuro do C#, acesse o C# Language Design Repo.

Comments

Popular posts from this blog

Verificar sequencia de caracteres iguais em uma string c#

Neste post vamos ver como explorar uma string e verificar se existe uma seqüencia de caracteres iguais dentro da string. Utilizaremos a tabela ASCII para verificar letras e números, se você precisar verificar mais caracteres basta consultar a tabela e colocar o número referente na condição. Neste exemplo vou verificar se existe na string uma seqüencia quatro(4) números iguais e o mesmo para uma seqüencia de três(3) letras, pois acho que em números de documentos ou nomes isto não pode acontecer. Tabela de decimal ASCII public static bool ValidaTexto(this string txt) { bool flag = true; if (txt.Length < 3) { flag = false; } else { int contLetras = 0; int contNumeros = 0; int tmp = (int)txt.ToCharArray()[0]; foreach (char c in txt.ToCharArray()) { if (((int)c < 127 && (int)c >= 65)) { if (tmp == (int)c) { contLetras++; } if (contLetras >= 3) { break; } tmp = (int)c; } } //inicia novamente o armazenador tmp =...

CRIANDO APLICATIVOS DO ZERO E FÁCIL!

O QUE VOCÊ VAI APRENDER? SÃO MAIS DE 10 HORAS DE CONTEÚDO PURO E MATERIAIS EXTRAS: CRIAR APLICATIVOS   Mesmo sendo um total iniciante vamos explicar para você como criar aplicativos profissionais. Utilizaremos a linguagem HTML, CSS, Javascript em união com Apache Cordova. MODELO DE NEGÓCIO  Vamos ensinar como ganhar dinheiro* fazendo aplicativos. Apresentamos os 4 pilares básicos para a monetização de um aplicativos e como fazer para ser bem-sucedido. ATENDIMENTO AO CLIENTE - Vamos dar atenção também a parte humana do processo. Como técnicas de atendimento e precificação, para você convencer seus futuros clientes a fechar negócio com você. Veja os módulos do curso aqui POR QUE FAZER ESTE CURSO? CERTIFICAÇÃO PROFISSIONAL A conclusão deste curso oferece certificação profissional válida em todo território nacional. Podendo portanto ser colocado no seu curriculum, com duração total de 10 horas. GARANTIA Se por algum motivo você achar que est...

Criando um filtro de busca customizável com JavaScript funcional

Tutoriais utilizando bibliotecas e frameworks para state management se tornaram comuns. Apesar disso, já que muita gente usa muitos frameworks diferentes, muitas vezes precisamos falar sobre a plataforma que permite isso tudo: a odiadíssima ferramenta que é o JavaScript, na sua forma mais pura — conforme descrito com documentações excelentes como a da MDN . Esse tutorial também pode ser útil para quem está iniciando em JavaScript e desenvolvimento em geral já começar com alguma ideia do que é programação funcional. O termo está se tornando popular e quem não subir nesse barco pode ficar para trás em pouco tempo. Não vamos adentrar nos detalhes do que é programação funcional neste artigo — isso é assunto para outras horas de conversa. Aqui, ficaremos no rápido e simples: alcançar nosso objetivo, evitando mutações dos dados e estado global. Iniciando o projeto Pelo bem da simplicidade, vamos manter tudo num único arquivo, que vai ter essa cara: <!DOCTYPE HTML> ...