2010-06-30 8 views

Antwort

119

Nein, ein Nullable ist eine Struktur. Was geschieht, ist, dass die Nullable-Struktur hat zwei Werte:

  1. Der Wert des Datentyps (int für int?, DateTime für DateTime?, etc.).
  2. Ein boolescher Wert, der angibt, ob der Datentypwert festgelegt wurde. (HasValue ist die Eigenschaft.)

Wenn Sie den Wert des Datentyps festgelegt, die Struktur HasValue auf true ändert.

What is a nullable

+4

Sie können den '=' Operator in C# nicht überladen. Das boolesche Flag wird vom impliziten Konvertierungsoperator und nicht vom Zuweisungsoperator gesetzt. – sepp2k

+0

oops danke sepp2k. – kemiller2002

6

Nein, ist der Nullable-Typ in der Tat eine Struktur. Die Laufzeitumgebung verarbeitet intelligent die Einstellung eines Nullwerts für Sie und gibt dabei das Aussehen eines Referenztyps an, wenn dies nicht der Fall ist.

+2

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

24

Von Nullable Types (C# Programming Guide):

Nullable-Typen sind Instanzen der System.Nullable Struktur.

und

Nullable Typen repräsentieren Wert-Typ Variablen, die den Wert von null zugeordnet werden kann. Sie können keinen nullfähigen Typ basierend auf einem Referenztyp erstellen. (Referenztypen unterstützen bereits den Nullwert.)

Also, nein, sie sind keine Referenztypen.

0

Es sollte nicht erforderlich sein, einen Referenztyp als Nullwerttyp einzugeben, da Sie stattdessen null übergeben können.

11

Nullable-Typen sind weder Werttypen noch Referenztypen. Sie sind mehr wie Werttypen, haben aber einige Eigenschaften von Referenztypen.

Natürlich können Nullable-Typen auf null festgelegt werden. Darüber hinaus kann ein nullwertfähiger Typ eine generische struct-Einschränkung nicht erfüllen. Wenn Sie einen NULL-fähigen Typ mit HasValue gleich false boxen, erhalten Sie einen null Zeiger anstelle eines NULL-Typen (NURLABY-Box) (eine ähnliche Situation besteht bei dem Unboxing).

Diese Eigenschaften machen NULL-Typen nichtwertartige Typen, aber sie sind auch keine Referenztypen. Sie sind ihre eigenen speziellen NULL-Wert-Typ.

Verwandte Themen