Sind nullfähige Typen Referenztypen?


Antworten:


136

Nein, eine Nullable ist eine Struktur. Was passiert ist, dass die nullbare Struktur zwei Werte hat:

  1. Der Wert des Datentyps ( intfür int?, DateTimefür DateTime?usw.).
  2. Ein boolescher Wert, der angibt, ob der Datentypwert festgelegt wurde. ( HasValueist das Eigentum.)

Wenn Sie den Wert des Datentyps festlegen, ändert sich die Struktur HasValuein true.

Nullable-Typen (C # -Programmierhandbuch)


26

Aus nullbaren Typen (C # -Programmierhandbuch) :

Nullable-Typen sind Instanzen der System.Nullable-Struktur.

und

Nullable-Typen stellen Werttypvariablen dar, denen der Wert null zugewiesen werden kann. Sie können keinen nullbaren Typ basierend auf einem Referenztyp erstellen. (Referenztypen unterstützen bereits den Nullwert.)

Nein, sie sind keine Referenztypen.


14

Nullable-Typen sind weder Werttypen noch Referenztypen. Sie ähneln eher Werttypen, haben jedoch einige Eigenschaften von Referenztypen.

Natürlich können nullbare Typen auf gesetzt werden null. Darüber hinaus kann ein nullfähiger Typ eine generische structEinschränkung nicht erfüllen . Wenn Sie einen nullbaren Typ mit HasValuegleich boxen false, erhalten Sie einen nullZeiger anstelle eines nullbaren Typs (eine ähnliche Situation besteht beim Unboxing).

Diese Eigenschaften machen nullfähige Typen zu nicht wertvollen Typen, aber sie sind sicher auch keine Referenztypen. Sie sind ihre eigenen speziellen Nullwerttypen.


6

Nein, der Nullable-Typ ist tatsächlich eine Struktur. Die Laufzeit übernimmt auf intelligente Weise die Einstellung eines Nullwerts für Sie und gibt das Erscheinungsbild eines Referenztyps an, wenn dies nicht der Fall ist.


2
Ich würde "intelligent behandeln" fragen, eher subjektiv. Persönlich finde ich das Verhalten verwirrend und oft nervig.
nicodemus13


0

Sie sollten einen Referenztyp nicht zu einem nullbaren Typ machen müssen, da Sie an seiner Stelle null übergeben können.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.