Wenn ich erkläre ein int
als Nullable-Sind Nullwerttypen Referenztypen?
int? i=null;
Ist hier i
eine Art Referenz geworden?
Wenn ich erkläre ein int
als Nullable-Sind Nullwerttypen Referenztypen?
int? i=null;
Ist hier i
eine Art Referenz geworden?
Nein, ein Nullable ist eine Struktur. Was geschieht, ist, dass die Nullable-Struktur hat zwei Werte:
int
für int?
, DateTime
für DateTime?
, etc.).HasValue
ist die Eigenschaft.)Wenn Sie den Wert des Datentyps festgelegt, die Struktur HasValue
auf true ändert.
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.
Ich würde abfragen "intelligent behandeln", eher subjektiv. Persönlich finde ich das Verhalten verwirrend und oft nervig. – nicodemus13
Nullable-Typen können keine Referenztypen sein.
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.
Es sollte nicht erforderlich sein, einen Referenztyp als Nullwerttyp einzugeben, da Sie stattdessen null übergeben können.
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.
Sie können den '=' Operator in C# nicht überladen. Das boolesche Flag wird vom impliziten Konvertierungsoperator und nicht vom Zuweisungsoperator gesetzt. – sepp2k
oops danke sepp2k. – kemiller2002