【问题标题】:C#: Problem trying to resolve a class when two namespaces are similarC#:当两个命名空间相似时尝试解析一个类时出现问题
【发布时间】:2011-02-24 06:39:52
【问题描述】:

我遇到了一个问题,我无法引用不同命名空间中的类。我有 2 节课:

namespace Foo
{
    public class Class1 { ... }
}

namespace My.App.Foo
{
    public class Class2
    {
        public void SomeMethod()
        {
            var x = new Foo.Class1; // compile error!
        }
    }
}

编译错误是:

类型或命名空间名称“Class1” 命名空间中不存在 '我的.App.Foo'

在这种情况下,我似乎无法让 Visual Studio 识别“Foo.Class1”指的是第一类。如果我将鼠标悬停在“Foo”上,则表明它试图将其解析为“My.App.Foo.Class1”

如果我把这条线:

using Foo;

在包含 Class2 的 .cs 文件的顶部,然后它还将其解析为“My.App.Foo”。

是否有一些技巧可以引用正确的“Foo”命名空间,而不仅仅是重命名命名空间,以免它们发生冲突?这两个命名空间都在同一个程序集中。

【问题讨论】:

    标签: c# namespaces


    【解决方案1】:

    您可以使用global:: 来全局限定命名空间:global::Foo.Class1 应该可以工作。

    您也可以使用别名 global::Foo 来简化操作。在源文件顶部的 using 语句下方,添加:

    using AliasClass1=global::Foo.Class1;
    

    现在你可以使用了:

    AliasClass1 c = new AliasClass1();
    // and so on.
    

    当然,你可以使用比AliasClass 更好的名字:-)

    【讨论】:

    • 这在我的环境中不起作用。我认为您需要在 ::
    • @BlueMonkMN - 是的,我刚刚整理好了。
    • 呵呵,8 年的 C# 开发经验,不知何故我从未见过“使用 global::...”。这完美无缺。谢谢!
    • 很遗憾我首先得到了正确的答案,但你得到了所有的分数 ;)
    【解决方案2】:
    var x = new global::Foo.Class1();
    

    【讨论】:

      【解决方案3】:

      除了 LBushkin 的回答,您可能对 Eric Lippert 的这些文章感兴趣:

      Do not name a class the same as its namespace, Part One
      Do not name a class the same as its namespace, Part Two
      Do not name a class the same as its namespace, Part Three
      Do not name a class the same as its namespace, Part Four

      它们与您的问题没有直接关系,但它们对命名策略提供了有趣的见解

      【讨论】:

        猜你喜欢
        • 2011-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-21
        相关资源
        最近更新 更多