Tipos anuláveis ​​são tipos de referência?

135

Quando declaro um intcomo nulo

int? i=null;

Será que iaqui se tornar um tipo de referência?

Vaibhav Jain
fonte

Respostas:

136

Não, um anulável é uma estrutura. O que está acontecendo é que a estrutura anulável tem dois valores:

  1. O valor do tipo de dados ( intpara int?, DateTimepara DateTime?etc.).
  2. Um valor booleano que informa se o valor do tipo de dados foi definido. ( HasValueé a propriedade.)

Quando você define o valor do tipo de dados, a estrutura muda HasValuepara true.

Tipos anuláveis ​​(Guia de Programação em C #)

kemiller2002
fonte
26

Dos tipos anuláveis ​​(Guia de Programação em C #) :

Tipos anuláveis ​​são instâncias da estrutura System.Nullable.

e

Tipos anuláveis ​​representam variáveis ​​do tipo valor que podem receber o valor nulo. Você não pode criar um tipo anulável com base em um tipo de referência. (Os tipos de referência já suportam o valor nulo.)

Portanto, não, eles não são tipos de referência.

ChrisF
fonte
14

Tipos anuláveis ​​não são tipos de valor nem tipos de referência. Eles são mais parecidos com os tipos de valor, mas têm algumas propriedades dos tipos de referência.

Naturalmente, tipos anuláveis ​​podem ser definidos como null. Além disso, um tipo anulável não pode satisfazer uma structrestrição genérica . Além disso, quando você caixa um tipo anulável com HasValueigual a false, você recebe um nullponteiro em vez de um tipo anulável em caixa (uma situação semelhante existe com unboxing).

Essas propriedades tornam os tipos anuláveis ​​sem valor, mas com certeza também não são tipos de referência. Eles são seus próprios tipos especiais de valor nulo.

Stephen Cleary
fonte
6

Não, o tipo Nullable é de fato uma estrutura. O tempo de execução manipulará inteligentemente a configuração de um valor nulo para você, dando a aparência de um tipo de referência, quando não for ....

Matthew Abbott
fonte
2
Gostaria de consultar 'manipular inteligentemente', bastante subjetivo. Pessoalmente, acho o comportamento confuso e muitas vezes irritante.
precisa
0

Você não precisa tornar um tipo de referência anulável, pois pode passar nulo em seu lugar.

devlife
fonte