使用指令与完整路径名称

时间:2010-08-05 14:04:47

标签: c# .net

是否存在从不同命名空间引用类型的一般规则。你一直使用:

using System.Drawing;

而不是在需要时定义它:

System.Drawing.Graphics gr;

当我只“调用”一次时,我倾向于键入完整的命名空间。有没有最好的做法?

7 个答案:

答案 0 :(得分:9)

我使用的是(以及我相信大多数开发人员使用的),总是说

using System.Drawing; 

并保留

System.Drawing.Graphics gr;

仅针对存在冲突的地方,在不同的命名空间中定义了两个Graphics,即便如此,我仍然宁愿使用using来区分它们:

using MyGraphics=My.Own.Conflicting.Named.Graphics;
//  :
var myGraph = new MyGraphics();

答案 1 :(得分:3)

代码中的完全限定名称会分散注意力并产生噪音。我宁愿永远不要拥有它们。如果存在名称空间冲突,则使用别名可以解决该问题。

此外,让我们面对现实,99.99%的C#开发人员正在使用Visual Studio,因此了解类型来自哪个命名空间和/或程序集与F12一样快或只是将鼠标悬停一秒钟。

我唯一喜欢代码中完全限定名称的代码是代码示例,就像在Stack Overflow中一样,以清楚地说明正在使用的类型。

答案 2 :(得分:2)

调用一次可以转变为更进一步,称之为10次,20次或n次。我的经验法则是C#设计团队出于某种原因将“使用”放入语言中,所以如果你原谅双关语,请使用它。

例如,如果我正在编写以下代码:

private System.Drawing.Drawing2D.HatchBrush GetHatchBrush()
{
    System.Drawing.Color c = System.Drawing.Color.Red;
    System.Drawing.Drawing2D.HatchBrush h = new System.Drawing.Drawing2D.HatchBrush(System.Drawing.Drawing2D.HatchStyle.BackwardDiagonal, c);

    return h;
}

仅使用ColorHatchBrush一次,我当然更愿意阅读:

private HatchBrush GetHatchBrush()
{
    Color c = Color.Red;
    HatchBrush h = new HatchBrush(HatchStyle.BackwardDiagonal, c);

    return h;
}

就个人而言,更好的是:

private System.Drawing.Drawing2D.HatchBrush GetHatchBrush()
{
    var c = Color.Red;
    var h = new HatchBrush(HatchStyle.BackwardDiagonal, c);

    return h;
}

正如James Curran所说,我唯一一次用完整的命名空间来完全限定一个类,而不是使用using,那么将一个名字带入范围会引起歧义。

答案 3 :(得分:2)

对于使用两个不同命名空间引入命名冲突的条件,我只避免using语句。

答案 4 :(得分:1)

这里没有普遍接受的最佳做法 只需使用常识。这里唯一的目标是可读性。

如果在代码中仅使用一次或两次相对罕见的类,请使用全名。

对于大多数名称空间,特别是经常使用的名称空间,请将它们放在顶部的using指令中。

还有一些非常(非常)罕见的案例,您需要使用它来创建别名,但这与此问题没有实际关系。

答案 5 :(得分:1)

  

我倾向于输入完整的命名空间   我只是“召唤”它一次。在那儿   关于那个的最佳实践?

一般来说,即使只调用一次,我也会看到“使用”,这似乎是标准(也是Resharper会推动你走向的,很多人倾向于喜欢他们的默认约定)

答案 6 :(得分:0)

如果您认为应该回答这个问题的模块对您来说好一点。

如果您滥用名称空间使用,则会出现名称冲突的问题。

如果您有一个专用于图形的模块,并且该模块仅通过其接口使用,那么您甚至不会在该模块之外访问它。在这种情况下,你将在模块中使用Using(可以这么说!),因此理解它是一件好事,让我们说出你的手指吧!