【问题标题】:How do you resolve .Net namespace conflicts with the 'using' keyword?您如何解决 .Net 命名空间与“使用”关键字的冲突?
【发布时间】:2010-09-08 20:14:04
【问题描述】:

问题出在这里,您包含多个程序集并在代码文件的顶部添加“使用 namespaceX”。
现在您要创建一个类或使用在多个命名空间中定义的符号, 例如System.Windows.Controls.Image & System.Drawing.Image

现在,除非您使用完全限定名称,否则尽管顶部有正确的“使用”声明,但由于歧义,将会出现 crib/build 错误。这里的出路是什么?

(另一个知识库帖子。。我搜索了大约 10 分钟后找到了答案,因为我不知道要搜索的正确关键字)

【问题讨论】:

  • 正如公认的答案所述,使用别名,但尽量在整个代码库中包含(一个命名空间/类只有一个别名,它们应该很容易区分)。

标签: .net namespaces using


【解决方案1】:

使用别名

using System.Windows.Controls;
using Drawing = System.Drawing;

...

Image img = ... //System.Windows.Controls.Image
Drawing.Image img2 = ... //System.Drawing.Image

How to: Use the Namespace Alias Qualifier (C#)

【讨论】:

  • 删除我的答案以减少混乱。 '命名空间别名限定符' - 现在这个名字是我永远不会想出用作搜索关键字的东西。 :)
  • 是的,这是违反单一职责原则的一个很好的例子。但是把它展示给你的同事并听到“哇!,FTW?!”太有趣了
  • using <namespace> = ... 构造的名称是using alias directive,它记录在here(答案中的链接现在已失效)。 命名空间别名限定符 [operator]:: 运算符的名称,它将命名空间别名与类型名称分开:Drawing::Image;而Drawing.Image,如答案所示,也可以工作,它可能是模棱两可的 - 请参阅docs
【解决方案2】:

这个页面对命名空间和使用语句有很好的描述:

http://www.blackwasp.co.uk/Namespaces.aspx

您想阅读有关“创建别名”的部分,该部分将允许您为一个或两个名称空间创建一个别名,并像这样引用它们:

using ControlImage = System.Windows.Controls.Image;
using System.Drawing.Image;

ControlImage.Image myImage = new ControlImage.Image();
myImage.Width = 200;

【讨论】:

    猜你喜欢
    • 2016-02-20
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多