Laden...

Hat die verwendung von default ausserhalb von Generics einen tieferen Sinn?

Erstellt von CMajor vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.522 Views
C
CMajor Themenstarter:in
8 Beiträge seit 2013
vor 10 Jahren
Hat die verwendung von default ausserhalb von Generics einen tieferen Sinn?

hallo,

Mir ist gerade folgender Code über den Weg gelaufen.

public Interface IFoo
{
 ... 
}

private void AnyMethod()
{
   IFoo foo = default(IFoo);
   Win32Api.AnotherUnmanagedWinApiMethod(ref foo);
}

Ich kenne default in Verbindung mit Generics aber nicht in ausserhalb dieses Bereichs. Macht das irgendeinen speziellen Sinn oder ist das nur eine andere Art die instance auf null zu setzen?

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo CMajor,

anscheinend geht Microsoft davon aus, dass wie Verwendung von default() nur in generischem Code Sinn macht, denn in default (C#-Referenz) wird es nur in diesem Kontext genannt. Und auch auf der entsprechenden Seite default-Schlüsselwort in generischem Code (C#-Programmierhandbuch) steht "generisch" explizit im Titel und der Text bezieht sich auch nur auf die Verwendung mit Typparametern.

Wenn es nicht um Typparameter geht, sondern um explizite _Referenz_typen und _Basis_datentypen würde ich tatsächlich nicht default() verwenden, sondern null oder 0. Aber für Strukturtypen sieht ein default (MeinTyp) doch gar nicht schlecht aus, jedenfalls besser als new MeinTyp ().

herbivore

F
10.010 Beiträge seit 2004
vor 10 Jahren

Wobei das hier nicht anders geht.
Eine Funktion die einen REF parameter verlangt, verlangt auch das dieser vorbesetzt ist.
Da man aber ein Interface nicht mit New anlegen kann, ist das hier die einzige Möglichkeit.

In 99% der Fälle ist hier aber die Parameterübergabe falsch gewählt,
denn für exact diesen Fall gibt es eigentlich das Schlüsselwort "out".

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo FZelle,

Wobei das hier nicht anders geht.

doch, man könnte auch direkt mit null initialisieren. default von einem Interface ist wie bei jedem anderen Referenztyp eh null.

herbivore

1.552 Beiträge seit 2010
vor 10 Jahren

Hallo,

Ich verwende default zusätzlich noch vor allem in Code Contracts, z.B. wenn eine Abstrakte Klasse oder ein Interface "validiert" werden sollte.

Gruß,
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

6.911 Beiträge seit 2009
vor 10 Jahren

Hallo xxMUROxx,

default verwendete ich auch oft in den Code Contracts, wurde aber zu fault um das immer zu schreiben und daher geb ich dort entweder null zurück od. lass die throw new NotImplementedException() (die VS beim implementieren der Schnittstelle erzeugt) stehen. Der Contract Rewriter kapiert das schon.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"