2010-08-05 43 views
4

是否存在从不同名称空间引用类型的一般规则。你一直使用:使用指令与完整路径名称

using System.Drawing; 

,而不是在需要的时候将其定义:

System.Drawing.Graphics gr; 

我倾向于当我只输入完整的命名空间“呼叫”一次。有没有关于这方面的最佳做法?

回答

9

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

using System.Drawing; 

和储备

System.Drawing.Graphics gr; 
只为地方

那里是有在两个冲突Graphics在不同的命名空间中定义,即使如此,我仍然宁愿使用using来区分它们:

using MyGraphics=My.Own.Conflicting.Named.Graphics; 
// : 
var myGraph = new MyGraphics(); 
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; 
} 

正如詹姆斯柯伦所说,唯一的t ime我完全有资格使用它的完整名称空间,而不是使用using将类名称带入范围时会引入歧义。

2

我只避免using声明条件,使用两个不同的名称空间会引入命名冲突。

+0

即使这样我就在其中一个名称空间上使用别名。 – 2010-08-05 14:12:42

1

这里没有公认的最佳实践。
只是使用常识。这里唯一的目标是可读性。

当您的代码中只使用了一次或两次相对较少的类时,请使用全名。

对于大多数命名空间,尤其是经常使用的命名空间,将它们放在顶部的using指令中。

还有一些非常罕见的情况,您需要使用它来创建别名,但这个问题并没有真正的影响。

1

我倾向于键入完整的命名空间时 我只“调用”它一次。有没有 关于这方面的最佳做法?

一般来说,我请参阅“使用”而即使使用时只调用的东西一次,这似乎是标准的(并且也是什么ReSharper的将推动你走向,很多人往往喜欢它们的默认约定)

3

代码中的完全限定名称令人分心并且很吵闹。我宁愿永远不要拥有它们。如果存在名称空间冲突,则使用别名可以解决该问题。我们面对它,99.99%的C#开发人员正在使用Visual Studio,因此知道类型的名称空间和/或程序集来自F12,或者只是将鼠标悬停一秒钟。

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

0

如果你认为模块应该为你回答这个问题好一点。

如果您滥用名称空间使用或不使用名称空间,您的问题将会发生名称冲突。

如果你有一个专用于图形表达的模块,并且该模块只能通过它的接口使用,那么你甚至不会在该模块之外访问它。在这种情况下,你将在模块内部使用Using(这么说!),所以这对理解来说是一件好事,让我们说出来,你的手指也是!