- Was ist die Verwendung von
defaultSchlüsselwörtern in C #? - Wird es in C # 3.0 eingeführt?
defaultSchlüsselwörtern in C #?Antworten:
Das defaultSchlüsselwort ist kontextbezogen, da es mehrere Verwendungen hat. Ich vermute, dass Sie sich auf die neuere C # 2-Bedeutung beziehen, in der der Standardwert eines Typs zurückgegeben wird. Für Referenztypen ist dies nullund für Werttypen ist dies eine neue Instanz, die alle auf Null gesetzt ist.
Hier einige Beispiele, um zu demonstrieren, was ich meine:
using System;
class Example
{
static void Main()
{
Console.WriteLine(default(Int32)); // Prints "0"
Console.WriteLine(default(Boolean)); // Prints "False"
Console.WriteLine(default(String)); // Prints nothing (because it is null)
}
}
Sie können default verwenden, um auch den Standardwert von a zu erhalten Generic Type.
public T Foo<T>()
{
.
.
.
return default(T);
}
Die häufigste Verwendung ist bei Generika ; Während es für "normale" Typen (dh usw.) funktioniertdefault(string) , ist dies in handgeschriebenem Code ziemlich ungewöhnlich.
Ich verwende diesen Ansatz jedoch bei der Codegenerierung, da dies bedeutet, dass ich nicht alle verschiedenen Standardeinstellungen fest codieren muss - ich kann nur den Typ und die Verwendung default(TypeName)im generierten Code herausfinden .
Bei Generika ist die klassische Verwendung das TryGetValueMuster:
public static bool TryGetValue(string key, out T value) {
if(canFindIt) {
value = ...;
return true;
}
value = default(T);
return false;
}
Hier wir haben einen Wert zuweisen , das Verfahren zu beenden, aber der Anrufer soll nicht wirklich, was es ist. Sie können dies der Konstruktoreinschränkung gegenüberstellen:
public static T CreateAndInit<T>() where T : ISomeInterface, new() {
T t = new T();
t.SomeMethodOnInterface();
return t;
}
Das Standardschlüsselwort hat je nach Verwendungskontext unterschiedliche Semantiken.
Die erste Verwendung erfolgt im Kontext einer switch-Anweisung, die seit C # 1.0 verfügbar ist:
http://msdn.microsoft.com/en-us/library/06tc147t(VS.80).aspx
Die zweite Verwendung erfolgt im Zusammenhang mit Generika beim Initialisieren einer generischen Typinstanz, die seit C # 2.0 verfügbar ist:
http://msdn.microsoft.com/en-us/library/xwth0h0d(VS.80).aspx
Das Schlüsselwort "default" (abgesehen von "switch-case") hilft Ihnen beim Initialisieren der Instanz eines Objekts wie Klasse, Liste und weiterer Typen. Es wird aufgrund seiner generischen Eigenschaft verwendet, mit der Sie den Standardwert des Typs zuweisen können, wenn Sie ihn nicht kennen Wert als Fortschritt, um Fehler in Ihrem weiteren (zukünftigen) Code zu vermeiden.