Ich habe eine Eigenschaft wie folgt:
%Vor%und ich habe einen Test in einer meiner Methoden wie folgt:
%Vor% Abhängig davon, wann diese Methode aufgerufen wird, wurde möglicherweise Breadcrumbs
nicht festgelegt. In einem Test wird Breadcrumbs == null
zu True ausgewertet.
Wird die Unset-Eigenschaft immer einen Wert haben? (Wird es immer null
sein?)
Eine automatisch implementierte Eigenschaft, die von keinem Code explizit festgelegt wurde, hat immer den Standardwert für den Eigenschaftstyp, der für Referenztypen null ist. (Für int
wäre es 0, für char
wäre es '\ 0' usw.).
Eine automatisch implementierte Eigenschaft wie diese ist nur äquivalent zu:
%Vor%... mit der Ausnahme, dass die Unterstützungsvariable einen unsäglichen Namen hat (Sie können nicht im Code darauf verweisen), so dass es immer mit dem Standardwert für den Typ beginnt.
Auto-Eigenschaften verwenden Hintergrundfelder und werden zu regulären Eigenschaften kompiliert.
Wenn der Eigenschaftstyp ein Referenztyp ist, wäre der Wert null, wenn nicht der Wert der Standardwert wäre.
Klassenmitgliedsvariablen (aufgerufene Felder) und damit Begleitvariablen von Eigenschaften werden immer auf ihren Standardwert initialisiert, wenn sie nicht explizit initialisiert werden, also null
für Referenztypen. Der Standardwert für alle Typen ist der Wert, dessen Binärdarstellung aus allen Bits besteht, die auf 0 gesetzt sind.
Auf der anderen Seite müssen Sie in C # lokale Variablen explizit initialisieren. Dies sind: Variablen, die in Methoden, Konstruktoren und Eigenschaftenaccessoren deklariert sind, und out
Methodenparameter; Sie werden als undefiniert behandelt, bis Sie ihnen einen Wert zuweisen.
Es ist logisch unmöglich, dass es keinen Wert hat. Es muss etwas zurückgeben, ein paar Einsen und Nullen, die zumindest als Verweis auf Tuple<String, String>[]
betrachtet werden, also hat es einen Wert.
Es ist auch der Fall, dass alle Felder in Klassen auf ihren Standardwert gesetzt werden ( default(T)
für den Typ T
, der für alle Referenztypen null
ist). Sonst wäre es möglich, ein Objekt in einem Zustand zu haben, der nicht nur keinen Sinn ergibt, sondern auch keinen Sinn ergibt, nach welchen Regeln Objekte von .NET erwartet werden. Dies schließt die versteckten Felder hinter den automatischen Eigenschaften ein.
Jetzt können wir in einigen Sprachen das Äquivalent dazu machen:
%Vor% Wenn dies erlaubt wäre, hätte whatIWillSend
einen Wert, der nicht durch eine bewusste Entscheidung von Ihnen definiert wurde, sondern durch das, was sich gerade in der Erinnerung befand. Es könnte null sein, es könnte ein gültiger Tuple<String, String>[]
rein zufällig sein (aber nicht der, den du verwenden wolltest!), Es könnte ein Dictionary<int, List<string>>
sein, das die Laufzeit jetzt denken wird, ist tatsächlich ein Tuple<String, String>[]
( da geht die typsicherheit des gesamten systems, könnte es ein viertel prozent co_de% struktur sein. (In den Sprachen, die solche Dinge erlauben, könnte es auch ein bekannter Wert sein, den Debugger für solche Sprachen in diesen Fällen genau so einstellen, um Fehler zu finden, die dadurch verursacht werden.)
Das ist das nächste, was wir zu einer Immobilie bringen können, die keinen Wert hat. Beachten Sie jedoch Folgendes:
Tags und Links .net c# properties