пожалуйста, объясните использование "default ()" в этом коде - PullRequest
6 голосов
/ 28 июля 2010

источник 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(); 

  } 

зачем использовать default (Server)? - даже если сервер похож на asd = new asd (); он все равно будет подключаться к экземпляру по умолчанию!

зачем использовать по умолчанию (связанный сервер) -в чем смысл? мы все еще указываем srv и поставщика и продукта!

Ответы [ 9 ]

11 голосов
/ 28 июля 2010

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 голосов
/ 28 июля 2010

default может быть полезно для назначения печатных нулевых ссылок.У меня есть предпочтение использовать ключевое слово var при объявлении переменных следующим образом:

var value = default(Class);

Единственный способ сделать это - использовать default, потому что компилятору нужна информация о типе для вывода value,В вашем конкретном примере это просто добавляет бессмысленное многословие.

2 голосов
/ 28 июля 2010

точка не представляется, учитывая, что она назначена сразу после.утверждение в этой ситуации бесполезно.Вы могли бы также поставить

Server srv = new Server();
2 голосов
/ 28 июля 2010

В вашем примере это ничего не делает. Это может быть удалено, и первые две строки могут быть объединены.

Server srv = new Server();

То же самое со связанным сервером.

LinkedServer lsrv = new LinkedServer(srv, "OLEDBSRV");
2 голосов
/ 28 июля 2010

Ключевое слово default было добавлено в .NET 2.0 для соответствия шаблонам. Он просто представляет значение по умолчанию (то есть неинициализированное) значение любого типа, переданного ему. Для ссылочных типов это null; для типов значений это «нулевое» значение. Нет никакой причины использовать этот оператор, если вы не пишете обобщенную функцию.

1 голос
/ 28 июля 2010

default(Server) вернет ноль.Синтаксически это эквивалент

Server srv = null;

Это код удобства, который позволяет равномерно обрабатывать типы значений и ссылочные типы, это особенно удобно, когда вы имеете дело с обобщениями.: http://msdn.microsoft.com/en-us/library/xwth0h0d.aspx

0 голосов
/ 28 июля 2010

default всегда обнуляет поле.Для ссылочных типов это означает, что ссылка равна null (поскольку null действительно указывает на нулевой адрес), а для типов значений это означает, что все поля в ней обнулены в памяти, что фактически делает числовые типы нулевыми, DateTime be DateTime.MinValue и т. д.

В этом случае я предполагаю, что Server и LinkedServer являются ссылочными типами, поэтому использование по умолчанию аналогично установке их на null.Я предполагаю, что тот, кто написал этот код, на самом деле не понимает, что делает default.

0 голосов
/ 28 июля 2010

default предоставляет значение по умолчанию для данного типа (интенсивно используется с обобщениями). Для ссылочных типов это нулевое значение, а для типов значений - нулевое значение.

В вашей ситуации нет никакого смысла - вы можете создать экземпляр экземпляра inline или указать null, поскольку вы знаете тип ...

0 голосов
/ 28 июля 2010

Используя ключевое слово default, вы можете присвоить значение по умолчанию переменной. Это удобно, когда вы используете универсальные типы.

...