Was ist die Verwendung des Standardschlüsselworts in C #?


Antworten:


100

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)
    }
}

80

Sie können default verwenden, um auch den Standardwert von a zu erhalten Generic Type.

public T Foo<T>()
{
    .
    .
    .
    return default(T);
}

33

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;
}

1
+1 bei T: new () vs. default (T). Ich bevorzuge wo T: new (), da es den vollständigen Konstruktor der generischen Klasse aufruft. Die Standardeinstellung (T) ist jedoch äußerst nützlich, wenn die Einschränkung new () nicht erfüllt werden kann. Dh unveränderlich / Singleton verbietet new ().
Robert J. Good


4

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.


0

Echo und Hervorhebung seiner Verwendung in Generika und wenig anderem als der Codegenerierung.

Wenn Sie auf Standard initialisieren müssen (in meinem Buch schon verdächtig stinkend), seien Sie klar. TU es einfach.

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.