2010-07-28 2 views
6

Quelle http://technet.microsoft.com/en-us/library/ms162234%28SQL.100%29.aspxbitte die Verwendung von "default()" in diesem Code

Code

//Connect to the local, default instance of SQL Server. 

    { 

    Server srv = default(Server); 
    srv = new Server(); 
    //Create a linked server. 
    LinkedServer lsrv = default(LinkedServer); 
    lsrv = new LinkedServer(srv, "OLEDBSRV"); 
    //When the product name is SQL Server the remaining properties are 
    //not required to be set. 
    lsrv.ProductName = "SQL Server"; 
    lsrv.Create(); 

    } 

erklären, warum Standard verwenden (Server) ,? -even wenn es wie Server asd = new asd(); Es verbindet sich immer noch mit der Standardinstanz!

Warum Standard verwenden (linkedserver) -What der Punkt? wir spezifizieren immer noch die srv und provider und produkt!

+1

Beachten Sie, dass dieses 'default' nichts mit der SQL Server-Standardinstanz zu tun hat - es ist ein rein C# -Sprachkonstrukt (das, wie alle Antworten darauf hinweisen, nichts hinzufügt, außer Verwirrung). Ich bin versucht, ein wenig Rückmeldung zu geben, dass C# -Sprache Beispiele von einem echten Menschen überprüft werden, der C# spricht ... – AakashM

Antwort

11

default(...) ist der Standardwertoperator. Es wird für Referenztypen null oder für Werttypen der Wert "Null" ausgewertet.

Hier ist es absolut sinnlos ... der Variable wird sofort ein anderer Wert zugewiesen. Hier ist das Äquivalent, aufgeräumter Code:

Server srv = new Server(); 
//Create a linked server. 
LinkedServer lsrv = new LinkedServer(srv, "OLEDBSRV"); 
//When the product name is SQL Server the remaining properties are 
//not required to be set. 
lsrv.ProductName = "SQL Server"; 
lsrv.Create(); 
2

Das default Schlüsselwort wurde hinzugefügt in .NET 2.0 Generika zu befriedigen. Es stellt nur den Standardwert (dh nicht initialisiert) dar, welcher Typ auch immer an ihn übergeben wird. Für Referenztypen ist dies null; Für Werttypen ist es der "Null" -Wert. Es gibt keinen Grund, diesen Operator zu verwenden, es sei denn, Sie schreiben eine generische Funktion.

+0

Ich mag es für Code-Verträge zu verwenden, wenn Sie den Vertrag für eine Schnittstelle angeben. Sie müssen die Schnittstelle implementieren, also muss alles, was einen Wert zurückgibt, * etwas * zurückgeben. Indem ich explizit 'default' verwende, hoffe ich, dass es als Verstärkung wirkt, dass wir keinen Wert zurückgeben, von dem wir besonders erwarten, dass er nützlich ist. –

1

Die default(Server) gibt null zurück. Syntaktisch ist es das Äquivalent von

Server srv = null; 

Es Bequemlichkeit Code ist, welche Arten für eine einheitliche Handhabung von Werttypen und Referenz erlaubt, ist es besonders praktisch, wenn Sie mit Generika handelt.

Schauen Sie sich den folgenden Verweis: http://msdn.microsoft.com/en-us/library/xwth0h0d.aspx

2

In Ihrem Beispiel ist es nicht etwas zu tun. Es könnte entfernt werden und die ersten zwei Zeilen könnten kombiniert werden.

Server srv = new Server(); 

Gleiches mit dem verbundenen Server.

LinkedServer lsrv = new LinkedServer(srv, "OLEDBSRV"); 
0

Mit dem Schlüsselwort default können Sie einer Variablen einen Standardwert zuweisen. Es ist praktisch, wenn Sie generische Typen verwenden.

2

es scheint nicht ein Punkt zu sein, wenn man bedenkt, dass es unmittelbar danach zugewiesen wird. Die Aussage in dieser Situation ist nutzlos. Sie könnten auch setzen

Server srv = new Server(); 
0

default den Standardwert des angegebenen Typs liefert (stark mit Generika verwendet). Für Referenztypen ist dies Null und Werttypen ist der Wert Null.

In Ihrer Situation gibt es keinen Punkt - die Instanz Inline-instanziiert könnte, oder geben Sie null, wie Sie den Typen kennen ...

0

default immer ein Feld Nullen.Für Referenztypen bedeutet dies, dass die Referenz null ist (da null wirklich auf die Adresse Null zeigt), und für Werttypen bedeutet dies, dass alle Felder darin im Speicher null sind, so dass numerische Typen Null sind, DateTimeDateTime.MinValue usw.

In diesem Fall gehe davon aus ich beide Server und LinkedServer Referenztypen sind, so standardmäßig verwendet, ist die gleiche wie sie null Einstellung. Ich nehme an, wer diesen Code geschrieben hat, versteht nicht wirklich, was default tut.

2

Die default kann nützlich sein, um typisierte Nullreferenzen zuzuordnen. Ich habe eine Vorliebe für die Verwendung des var Schlüsselwort, wenn Variablen wie folgt erklärt:

var value = default(Class); 

Die einzige Art, wie ich dies von default mit tun können, weil der Compiler Informationen benötigt Typ value abzuleiten. In Ihrem speziellen Beispiel fügt es einfach sinnlose Ausführlichkeit hinzu.

+1

+1 zum Beispiel .. – user287745

+0

Ich würde * definitiv * finden, dass weniger lesbar als 'Class value = null;' - Ich gehöre nicht zu diesen Leuten, die pathologisch "var" ablehnen, aber ich sehe keinen Nutzen darin, sie hier zu verwenden . –

+0

@Jon - Es geht um Konsistenz. Ich finde es auch lesbarer, es gibt also auch eine Meinung. – ChaosPandion

Verwandte Themen