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