2010-07-28 46 views
6

http://technet.microsoft.com/en-us/library/ms162234%28SQL.100%29.aspx請解釋使用 「默認()」 在此代碼

代碼

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

    } 

爲什麼要使用默認值(服務器),? - 即使它的服務器asd = new asd();它仍然會連接到默認實例!

爲什麼要使用默認(鏈接服務器) - 什麼意思?我們仍然指定srv和提供商和產品!

+1

請注意,此默認值與默認的SQL Server實例無關 - 它純粹是一種C#語言結構(正如所有答案指出的那樣,除了混淆之外,這裏沒有任何內容)。我試圖提出一些反饋,要求C#語言示例由講C#的實際人員審查... – AakashM 2010-07-28 14:04:30

回答

11

default(...)是默認值運算符。它針對參考類型評估爲空值,或者針對值類型評估爲「零」值。

這裏絕對沒有意義......變量被立即賦值爲一個不同的值。以下是等效的整數代碼:

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

在.NET 2.0中添加了default關鍵字以滿足泛型。它只是代表傳遞給它的任何類型的默認值(意味着未初始化的)。對於參考類型,這是null;對於值類型,它是「零」值。除非您正在編寫通用函數,否則沒有理由使用此運算符。

+0

在指定接口合同時,我喜歡將它用於代碼合同。你必須實現接口,所以返回值的任何東西都必須返回* something *。通過明確地使用'default',我希望它能起到強化作用,我們不會返回一個我們特別期望有用的值。 – 2010-07-28 14:03:12

2

在你的榜樣它沒有做任何事情。它可以被刪除,前兩行可以合併。

Server srv = new Server(); 

與鏈接服務器相同的東西。

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

通過使用default關鍵字,您可以爲變量分配默認值。當你使用泛型類型時它會派上用場。

2

這似乎並不是一個觀點,因爲它在之後立即被分配。在這種情況下的陳述是無用的。你不妨把

Server srv = new Server(); 
0

default提供給定類型(泛型大量使用)的默認值。對於引用類型,這是空的,值類型是零值。

在你的情況,沒有一點 - 那麼你可以用實例在線或指定null正如你所知道的類型......

0

default總是零出一個字段。對於參考類型,這意味着參考是null(因爲null確實指向地址零),對於值類型,它意味着其中的所有字段在內存中爲零,實際上使數字類型爲零,DateTimeDateTime.MinValue等。

在這種情況下,我假設ServerLinkedServer都是參考類型,所以使用默認值與將其設置爲null相同。我假設誰編寫這個代碼不知道default做什麼。

2

default可用於分配類型空引用。我有使用聲明變量這樣當var關鍵字的偏好:通過使用default

var value = default(Class); 

我能做到這一點的唯一方法是因爲編譯器需要輸入的信息來推斷value。在你的具體例子中,它只是增加了無意義的冗長度。

+1

+1例如.. – user287745 2010-07-28 14:09:43

+0

我肯定*會發現不如'Class value = null;'可讀性差 - 我不是那些病理上不喜歡'var'的人之一,但我在這裏看到沒有任何好處。 – 2010-07-28 14:19:05

+0

@Jon - 關於一致性。我也發現它更具可讀性,所以也有涉及的意見。 – ChaosPandion 2010-07-28 14:21:47