簡體   English   中英

請在此代碼中解釋“default()”的使用

[英]please explain the use of “default()” in this code

來源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(); 它仍將連接到默認實例!

為什么要使用默認值(linkedserver) - 這一點是什么? 我們仍然指定srv和提供商和產品!

default(...)是默認值運算符。 它為引用類型計算為null,或為值類型計算“零”值。

這里絕對沒有意義......變量立即被賦予不同的值。 這是等效的,更整潔的代碼:

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

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

在你的例子中,它沒有做任何事情。 它可以被刪除,前兩行可以組合。

Server srv = new Server();

鏈接服務器也是如此。

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

考慮到之后立即分配,似乎沒有一點。 這種情況下的陳述毫無用處。 你不妨放

Server srv = new Server();

default可用於分配類型化的空引用。 在聲明像這樣的變量時,我傾向於使用var關鍵字:

var value = default(Class);

我能做到這一點的唯一方法是使用default因為編譯器需要類型信息來推斷value 在您的具體示例中,它只會增加無意義的冗長。

default(Server)將返回null。 從語法上講,它相當於

Server srv = null;

它的便利代碼允許統一處理值類型和引用類型,在處理泛型時特別方便。

請查看以下參考: http//msdn.microsoft.com/en-us/library/xwth0h0d.aspx

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

default提供給定類型的默認值(與泛型一起使用)。 對於引用類型,這是null,值類型是零值。

在您的情況下,沒有意義 - 您可以實例化實例內聯或指定null因為您知道類型...

default始終將字段歸零。 對於引用類型,這意味着引用為null (因為null實際上指向地址零),對於值類型,它意味着其中的所有字段在內存中為零,有效地使數字類型為零, DateTimeDateTime.MinValue ,等等

在這種情況下,我假設ServerLinkedServer都是引用類型,因此使用default與將它們設置為null相同。 我假設編寫此代碼的人並不真正理解default

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM