Header Ads

Como funcionam os tipos de referência anuláveis ​​do C #?

Um dos principais recursos do C # 8.0 é o conceito de tipos de referência anuláveis, que representam uma grande mudança em como os programadores podem lidar com dados nulos. Discutiremos como eles funcionam e como usá-los.

O que são tipos de referência anuláveis?

Existem dois tipos principais de variáveis ​​em C #. Os tipos de valor têm tamanhos fixos, como int, float e bool. Eles são passados ​​entre funções por valor e geralmente são armazenados na pilha de — memória muito rápida que é limpa ao sair do escopo. Eles nunca podem ser nulos, mas usando a tag Nullable < T > struct, os tipos de valor podem ser feitos para oferecer suporte a dados nulos se você quiser esse comportamento.

RELACIONADO: Como funciona o gerenciamento de memória em C #?

O outro tipo de tipo são os tipos de referência, que são objetos maiores sem um tamanho fixo, como strings e listas. Quase sempre eles são armazenados no heap, com a variável na pilha sendo uma referência ao local da memória.

O problema é que os tipos de referência podem ser nulos. A variável que armazena o local pode ser definida como um valor nulo, o que é bastante comum, especialmente ao lidar com dados que não têm garantia de estar lá, como perguntas opcionais em um formulário da web. É por isso que o . NET precisa de um coletor de lixo, para limpar objetos que não têm mais referências ativas.

Se você é um programador . NET, está definitivamente acostumado com a verificação de nulos, que é onde você verifica manualmente se algo ficou nulo antes de usá-lo. Isso funciona bem e é uma operação muito barata de se fazer, mas em muitos casos é desnecessário. Para um tipo de referência ser nulo, ele não deve ter sido inicializado com um valor adequado ou ter sido atribuído manualmente ao valor nulo, por exemplo,

 variável = nula; 

Tipos de referência anuláveis ​​são uma nova adição que essencialmente impõe uma diferença entre as variáveis ​​de referência que podem se tornar nulas e as variáveis ​​de referência que não podem. É um recurso inovador que provavelmente deixará sua base de código com muitos avisos, portanto, é algo que você deve ativar manualmente. Assim que estiver ligado, o compilador começará a dizer a diferença entre:

  • string ?, que pode ser nula e retém o “ padrão ” comportamento de versões anteriores e
  • string, que não pode ser nula. Nunca pode ser nulo, porque deve receber um valor padrão e nunca pode ser definido como nulo.

Com o recurso habilitado, os tipos de referência funcionarão basicamente da mesma maneira que os tipos de valor — nunca tornando-se nulos, a menos que você diga ao compilador que pode fazer isso com o Tipo? sintaxe. Tecnicamente, “ tipos de referência anuláveis ​​” são o que C # sempre teve, e o novo recurso são os tipos de referência não anuláveis ​​que substituem os antigos.

Este recurso simples permite que você informe ao compilador sobre suas intenções para a variável. Se você tentar atribuir uma string anulável? valor para uma variável de string não anulável, você receberá um aviso de que não está tratando o valor nulo corretamente.

Para corrigir este aviso, você precisará definir o valor não anulável somente após verificar se ele não é nulo. O compilador é inteligente e sabe quando e onde o valor pode ser nulo. Se você envolvê-lo em um bloco if (value! = Null), ele não dará a você um aviso e irá lembrá-lo de que ele não é nulo ao usá-lo.

Ao contrário dos tipos de valor anulável, os tipos de referência anuláveis ​​são convertidos implicitamente em seus equivalentes não anuláveis, embora com um aviso.

Você pode usar tipos de referência anuláveis ​​em qualquer lugar em que possa usar tipos regulares, seja como uma variável local, campos ou propriedades para classes e estruturas, e parâmetros de entrada para funções. Se você tentar convertê-los em não nulos sem verificar, obterá um erro.

Como ativar o contexto anulável

No Solution Explorer, clique com o botão direito do mouse em seu projeto e selecione “ Editar arquivo de projeto. ” Pode ser necessário descarregá-lo primeiro para ver esta opção.

 < Anulável > ativar < / Anulável > 

Se você estiver usando o formato de projeto legado, pode ser necessário substituí-lo manualmente por uma diretiva na parte superior de cada arquivo:

 #nullable enable 

Se você não quiser ativar os avisos, pode usar a opção “ Anotação ” contexto, que só mostrará anotações quando você passar o mouse sobre elas.

Nenhum comentário