2010-07-28 13 views
6

fonte http://technet.microsoft.com/en-us/library/ms162234%28SQL.100%29.aspxspiegare l'uso di "default()" in questo codice

codice

//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(); 

    } 

perché utilizzare di default (Server) ,? - anche se il suo server like asd = new asd(); si collegherà comunque all'istanza predefinita!

perché utilizzare l'impostazione predefinita (server collegato) -questo è il punto? specifichiamo ancora srv, provider e prodotto!

+1

Si noti che questo 'default' non ha nulla a che fare con l'istanza predefinita di SQL Server - è puramente un costrutto in linguaggio C# (che, come sottolineano tutte le risposte, non aggiunge nulla eccetto la confusione). Sono tentato di mettere un po 'di feedback chiedendo che gli esempi di linguaggio C# vengano esaminati da un vero umano che parla C# ... – AakashM

risposta

11

default(...) è l'operatore del valore predefinito. Valuta come nullo per i tipi di riferimento o come valore "zero" per i tipi di valore.

Qui non ha assolutamente senso ... la variabile viene assegnata immediatamente a un valore diverso. Ecco l'equivalente, il codice più ordinato:

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

La default parola chiave è stata aggiunta in .NET 2.0 per soddisfare farmaci generici. Rappresenta solo il valore predefinito (ovvero non inizializzato) di qualunque tipo viene passato ad esso. Per i tipi di riferimento, questo è null; per i tipi di valore, è il valore "zero". Non c'è davvero alcun motivo per usare questo operatore a meno che tu non stia scrivendo una funzione generica.

+0

Mi piace usarlo per i contratti di codice, quando si specifica il contratto per un'interfaccia. Devi implementare l'interfaccia, quindi qualsiasi cosa che restituisce un valore deve restituire * qualcosa *. Usando esplicitamente 'default' spero che agisca da rinforzo per non restituire un valore che ci aspettiamo particolarmente utile. –

1

Il default(Server) restituirà null. Sintatticamente è l'equivalente di

Server srv = null; 

E 'codice di convenienza che consente per la gestione uniforme dei tipi di valore e tipi di riferimento, è particolarmente utile quando si tratta di farmaci generici.

Partenza il seguente riferimento: http://msdn.microsoft.com/en-us/library/xwth0h0d.aspx

2

Nel tuo esempio non sta facendo nulla. Potrebbe essere rimosso e le prime due linee potrebbero essere combinate.

Server srv = new Server(); 

Stessa cosa con il server collegato.

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

Utilizzando la parola chiave default è possibile assegnare un valore predefinito a una variabile. È utile quando si utilizzano tipi generici.

2

non sembra essere un punto, considerando che viene assegnato subito dopo. la dichiarazione in questa situazione è inutile. Si potrebbe anche mettere

Server srv = new Server(); 
0

default fornisce il valore predefinito del tipo specificato (usato pesantemente con i generici). Per i tipi di riferimento questo è null e i tipi di valore è il valore zero.

Nella tua situazione, non v'è alcun punto - si potrebbe creare un'istanza della linea istanza o specificare null come si conosce il tipo ...

0

default zeri sempre fuori un campo.Per i tipi di riferimento, il riferimento è null (dato che lo null punta davvero all'indirizzo zero) e per i tipi di valore significa che tutti i campi in esso contenuti sono zero nella memoria, rendendo effettivamente i tipi numerici zero, DateTimeDateTime.MinValue, ecc.

In questo caso, suppongo che sia Server sia LinkedServer siano tipi di riferimento, quindi l'utilizzo di default è lo stesso che impostarli su null. Presumo che chiunque abbia scritto questo codice non capisca cosa fa esattamente lo default.

2

default può essere utile per l'assegnazione di riferimenti null digitati. Ho una preferenza per l'utilizzo della parola chiave var quando la dichiarazione delle variabili in questo modo:

var value = default(Class); 

L'unico modo che posso fare è usare default perché il compilatore ha bisogno di digitare le informazioni per dedurre value. Nel tuo esempio specifico aggiunge semplicemente verbosità inutile.

+1

+1 per esempio .. – user287745

+0

Vorrei * sicuramente * trovarmi meno leggibile di 'Class value = null;' - Non sono una di queste persone a cui patologicamente non piace 'var', ma non vedo alcun vantaggio nell'utilizzarlo qui . –

+0

@Jon - Si tratta di coerenza. Lo trovo anche più leggibile, quindi c'è anche l'opinione. – ChaosPandion

Problemi correlati