请在此代码中解释“default()”的使用

时间:2010-07-28 13:58:31

标签: c# smo

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和提供者和产品!

9 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:2)

在.NET 2.0中添加了default关键字以满足泛型。它只表示传递给它的任何类型的默认值(意味着未初始化)。对于参考类型,这是null;对于值类型,它是“零”值。除非您正在编写通用函数,否则没有理由使用此运算符。

答案 2 :(得分:2)

在你的例子中,它没有做任何事情。它可以被删除,前两行可以组合。

Server srv = new Server();

与链接服务器相同。

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

答案 3 :(得分:2)

似乎没有一点,考虑到它是在之后立即分配的。这种情况下的陈述毫无用处。你不妨放

Server srv = new Server();

答案 4 :(得分:2)

default可用于分配类型化的空引用。在声明像这样的变量时,我倾向于使用var关键字:

var value = default(Class);

我能做到这一点的唯一方法是使用default因为编译器需要类型信息来推断value。在您的具体示例中,它只会增加无意义的冗长。

答案 5 :(得分:1)

default(Server)将返回null。从语法上讲,它相当于

Server srv = null;

它是方便代码,允许统一处理值类型和引用类型,在处理泛型时特别方便。

查看以下参考资料: http://msdn.microsoft.com/en-us/library/xwth0h0d.aspx

答案 6 :(得分:0)

通过使用default关键字,您可以为变量指定默认值。当您使用泛型类型时,它会派上用场。

答案 7 :(得分:0)

default提供给定类型的默认值(大量使用泛型)。对于引用类型,这是null,值类型是零值。

在您的情况下,没有意义 - 您可以实例化实例内联或指定null,因为您知道类型...

答案 8 :(得分:0)

default总是将字段清零。对于引用类型,这意味着引用是null(因为null实际上指向地址零),对于值类型,它意味着它中的所有字段在内存中都为零,有效地使数字类型零,DateTimeDateTime.MinValue等。

在这种情况下,我假设ServerLinkedServer都是引用类型,因此使用默认值与将它们设置为null相同。我假设编写此代码的人并不真正理解default的作用。