我应该同意禁止我的C#项目中的"使用"指令吗?

Mar*_*n K 25 .net c#

我的同事坚持在代码中明确指定命名空间而不是使用using指令.换句话说,每次在代码中出现此类型时,他都希望为每种类型使用完全限定名称.就像是

public class MyClass
{
    public static void Main()
    {
        System.Console.WriteLine("Foo");
    }
}
Run Code Online (Sandbox Code Playgroud)

代替:

using System;
public class MyClass
{
    public static void Main()
    {
        Console.WriteLine("Foo");
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以想象后果.

他给的职业选手:

  1. 将代码复制并粘贴到其他源文件中更简单.
  2. 它更具可读性(您可以立即看到名称空间).

我的缺点:

  1. 我要写更多
  2. 代码不太可读(我猜de gustibus non disputandum est)
  3. 没有人这样做!

你怎么看待这件事?

Fra*_*nov 65

如果你需要复制和粘贴代码,以实际拥有完全合格的类型,那么你就会遇到更大的问题.

另外,您是否计划记住每个类所在的命名空间,以便能够完全限定它?


Mar*_*ell 48

对于稍微不同的答案:LINQ.

扩展方法只能通过"using"语句获得.因此,查询语法或Fluent接口只能使用正确的"using"语句.

即使没有LINQ,我也会说使用"使用"......推断你能用更少的字符理解的越多越好.某些名称空间非常深,但不会为您的代码添加任何值.

还有其他扩展方法(不仅仅是LINQ)会受到同样的影响; 当然,你可以使用静态类,但流畅的界面更具表现力.


Rob*_*ney 37

我怎么看待这个?

我想,谁都会拿出这样的想法,谁就会证​​明它自己有办法的人,很可能有一些关于C#语言和.NET开发其他基本误解.

  • 例如:这样做的第一个原因 - 它使复制和粘贴代码更容易 - 本质上是说,"你应该承担大量的认知过载,完全限定你使用的每一种类型,因为它简化了经验丰富的C#程序员避免的任务就像瘟疫一样." (2认同)

Rya*_*ndy 23

在你的同事说"复制粘贴代码"的那一刻,他失去了所有可信度.


Kib*_*bee 19

我发现不使用"using"指令的最大问题不在于实例化和类的定义.它是将值传递给在命名空间中定义的函数.比较这两段代码(VB.Net,因为这就是我所知道的,但是你得到了图片).

Module Module1

    Sub Main()
        Dim Rgx As New System.Text.RegularExpressions.Regex("Pattern", _
            System.Text.RegularExpressions.RegexOptions.IgnoreCase _
            Or System.Text.RegularExpressions.RegexOptions.Singleline _
            Or System.Text.RegularExpressions.RegexOptions.IgnorePatternWhitespace)


        For Each result As System.Text.RegularExpressions.Match In Rgx.Matches("Find pattern here.")
            'Do Something
        Next
    End Sub

End Module
Run Code Online (Sandbox Code Playgroud)

还有这个

Imports System.Text.RegularExpressions

Module Module1

    Sub Main()
        Dim Rgx As New Regex("Pattern", _
            RegexOptions.IgnoreCase _
            Or RegexOptions.Singleline _
            Or RegexOptions.IgnorePatternWhitespace)


        For Each result As Match In Rgx.Matches("Find pattern here.")
            'Do Something
        Next
    End Sub

End Module
Run Code Online (Sandbox Code Playgroud)

在这种情况下,使用大量枚举,以及在for循环中内联声明变量,减少范围,在vb.Net的情况下不使用"使用"或"导入",可能导致可读性非常差.


Ric*_*son 9

通过复制和粘贴更容易移动代码只是一个不合理的,并且很可能是潜在危险实践的警告信号.代码的结构和易读性不应该由易于编辑决定.

如果有的话,它会使代码更具可读性和更具体 - 我个人对标准对象所处的位置不感兴趣,它类似于以完整的名字对你的同事说话,并以工作场所的街道地址为前缀.

然而,有时候,它偶尔会使代码更具可读性,因此硬性和快速的规则不适用,只是常识.


Jes*_*sen 6

因为我们在C#中有一个工具用于自动设置using语句,按Ctrl + dot - 我看不出有任何理由不使用它.另一个"酷"的事情是:

想想你有两个命名空间:

ConsoleNamespace1

ConsoleNamespace2

两者都有一个Console类.现在,您可以使用一行代码更改对ConsoleNamespace2的所有引用 - 这很酷.

我的建议:using如果可以,请使用,如果必须,请使用.我不认为完全一个,如果更容易阅读.了解你的框架,这永远不会成为问题.