2009-11-13 24 views
58
  1. Jaki jest pożytek ze słowa kluczowego default w języku C#?
  2. Czy wprowadzono go w C# 3.0?
+0

http://stackoverflow.com/questions/367378/returning-a-default-value-c –

+0

[Zobacz to!] (Http://msdn.microsoft.com/en-us/library/vstudio/83fhsxwc .aspx) – MasterMastic

+0

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/default –

Odpowiedz

79

Słowo kluczowe default jest kontekstowe, ponieważ ma wiele zastosowań. Zgaduję, że odnosisz się do jego nowszego znaczenia C# 2, w którym zwraca domyślną wartość typu. Dla typów odniesienia jest to null, a dla typów wartości to nowe wystąpienie zerowe.

Oto kilka przykładów, aby wykazać, co mam na myśli:

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

można użyć domyślnego aby uzyskać wartość domyślną w Generic Type również.

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

+1; IMO jest to najczęściej używane ... –

30

Najpopularniejszym zastosowaniem jest with generics; podczas gdy działa dla "zwykłych" typów (to jest default(string) itp.), jest to dość rzadkie w ręcznie pisanym kodzie.

Jednak używam tego podejścia podczas generowania kodu, ponieważ oznacza to, że nie muszę sztywno kodować wszystkich różnych wartości domyślnych - mogę po prostu dowiedzieć się typu i użyć default(TypeName) w wygenerowanym kodzie.

W generycznych, klasyczny wykorzystanie jest TryGetValue wzór:

public static bool TryGetValue(string key, out T value) { 
    if(canFindIt) { 
     value = ...; 
     return true; 
    } 
    value = default(T); 
    return false; 
} 

Tutaj mamy przypisać wartość do wyjść metodę, ale rozmówca nie powinien naprawdę obchodzi, co to jest. Można kontrast to do ograniczenia konstruktora:

public static T CreateAndInit<T>() where T : ISomeInterface, new() { 
    T t = new T(); 
    t.SomeMethodOnInterface(); 
    return t; 
} 
+0

+1 w przypadku, gdy T: new() vs default (T). Wolę gdzie T: new(), ponieważ wywołuje pełny konstruktor klasy ogólnej. Ale wartość domyślna (T) jest niezwykle przydatna, gdy nie można spełnić warunku new(). To znaczy. Niezmienny/singleton uniemożliwiający nowe(). –

3

„default” słowo kluczowe (oprócz przełącznika literami) pomaga zainicjować instancję obiektu, takich jak klasa, listy i więcej rodzajów Jest on stosowany ze względu na jego właściwości rodzajowego gdzie pomaga przydzielić domyślną wartość typów, gdy nie znasz jej wartości jako zaawansowanej metody unikania błędów w dalszym (przyszłym) kodzie.

Powiązane problemy