【问题标题】:please explain the use of "default()" in this code请解释此代码中“default()”的使用
【发布时间】:2011-03-22 04:21:47
【问题描述】:

来源 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 和 provider 和 product!

【问题讨论】:

  • 请注意,此 default 与默认 SQL Server 实例无关 - 它纯粹是 C# 语言构造(正如所有答案所指出的那样,除了混淆之外,这里没有添加任何内容)。我很想提出一些反馈,要求 C# 语言示例由会说 C# 的实际人员进行审查...

标签: c# smo


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 在为接口指定合约时,我喜欢将其用于代码合约。你必须实现接口,所以任何返回值的东西都必须返回something。通过明确使用default,我希望它能够强化我们没有返回我们特别期望有用的值。
    【解决方案3】:

    在您的示例中,它没有做任何事情。它可以被删除,前两行可以合并。

    Server srv = new Server();
    

    链接服务器也是如此。

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

    【讨论】:

      【解决方案4】:

      似乎没有一点,考虑到它是在之后立即分配的。在这种情况下的声明是没有用的。你不妨把

      Server srv = new Server();
      

      【讨论】:

        【解决方案5】:

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

        var value = default(Class);
        

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

        【讨论】:

        • 肯定发现它的可读性不如Class value = null; - 我不是这些病态地不喜欢var的人之一,但我认为使用它没有任何好处在这里。
        • @Jon - 这是关于一致性的。我也发现它更具可读性,因此也涉及到意见。
        • @Chaos:一致性是什么?你是否使用var 来声明每个局部变量?
        • @Jon - 确实。我可以假设 every 上的强调 意味着您感到惊讶吗?
        • @Jon - 第 1 点:它迫使我编写详细的方法名称,而且我不使用记事本编写代码。 :) 第 2 点:我使用文字符号 var x = 300000000L 或显式转换 var x = (byte)1
        【解决方案6】:

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

        Server srv = null;
        

        这是一种方便的代码,可以统一处理值类型和引用类型,在处理泛型时特别方便。

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

        【讨论】:

          【解决方案7】:

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

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

          【讨论】:

            【解决方案8】:

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

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

            【讨论】:

              【解决方案9】:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2021-11-27
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-07-20
                • 1970-01-01
                相关资源
                最近更新 更多