我的同事坚持在代码中明确指定命名空间而不是使用using指令.换句话说,每次在代码中出现此类型时,他都希望为每种类型使用完全限定名称.就像是
public class MyClass { public static void Main() { System.Console.WriteLine("Foo"); } }
代替:
using System; public class MyClass { public static void Main() { Console.WriteLine("Foo"); } }
你可以想象后果.
他给的职业选手:
将代码复制并粘贴到其他源文件中更简单.
它更具可读性(您可以立即看到名称空间).
我的缺点:
我要写更多
代码不太可读(我猜de gustibus non disputandum est)
没有人这样做!
你怎么看待这件事?
如果你需要复制和粘贴代码,以实际拥有完全合格的类型,那么你就会遇到更大的问题.
另外,您是否计划记住每个类所在的命名空间,以便能够完全限定它?
对于稍微不同的答案:LINQ.
扩展方法只能通过"using"语句获得.因此,查询语法或Fluent接口只能使用正确的"using"语句.
即使没有LINQ,我也会说使用"使用"......推断你能用更少的字符理解的越多越好.某些名称空间非常深,但不会为您的代码添加任何值.
还有其他扩展方法(不仅仅是LINQ)会受到同样的影响; 当然,你可以使用静态类,但流畅的界面更具表现力.
我怎么看待这个?
我想,谁都会拿出这样的想法,谁就会证明它自己有办法的人,很可能有一些关于C#语言和.NET开发其他基本误解.
在你的同事说"复制粘贴代码"的那一刻,他失去了所有可信度.
我发现不使用"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
还有这个
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
在这种情况下,使用大量枚举,以及在for循环中内联声明变量,减少范围,在vb.Net的情况下不使用"使用"或"导入",可能导致可读性非常差.
通过复制和粘贴更容易移动代码只是一个不合理的,并且很可能是潜在危险实践的警告信号.代码的结构和易读性不应该由易于编辑决定.
如果有的话,它会使代码更具可读性和更具体 - 我个人对标准对象所处的位置不感兴趣,它类似于以完整的名字对你的同事说话,并以工作场所的街道地址为前缀.
然而,有时候,它偶尔会使代码更具可读性,因此硬性和快速的规则不适用,只是常识.
因为我们在C#中有一个工具用于自动设置using语句,按Ctrl + dot - 我看不出有任何理由不使用它.另一个"酷"的事情是:
想想你有两个命名空间:
ConsoleNamespace1
和
ConsoleNamespace2
两者都有一个Console类.现在,您可以使用一行代码更改对ConsoleNamespace2的所有引用 - 这很酷.
我的建议:using
如果可以,请使用,如果必须,请使用.我不认为完全一个,如果更容易阅读.了解你的框架,这永远不会成为问题.