【问题标题】:'Class' is a namespace but is used like a 'type'“类”是一个命名空间,但用作“类型”
【发布时间】:2015-07-22 04:08:14
【问题描述】:

首先,这与关于这个确切主题的许多高度赞成的问题相同,除非我错过了其中一个。他们都指出问题是我有一个与类同名的命名空间。这不是(但确实如此)。

我开始创建一个名为BatchResizer 的新控制台应用程序,并在其中放置了几个类,但后来决定将其移动到一个名为BatchResizer.Components 的类库中;然后我将原始控制台应用程序重命名为BatchResizer.ConsoleRunner,将该项目中的所有类更改为namespace BatchResizer.ConsoleRunner.[...],将程序集名称和默认命名空间设置为相同。

有一个名为 BatchResizer 的类,但项目中不再有名为 [...].BatchResizer 的命名空间,但是当我这样做 var batchResizer = new BatchResizer() 时,我收到命名空间像类一样使用的错误。 项名称类似于 BatchResizer.ConsoleRunner.[...]BatchResizer.Components.[...],但没有以 BatchResizer 结尾的项目。

我已经尝试“清理”并重新构建项目,删除.suo 文件,删除解决方案中所有项目的/bin 文件夹,并且我已经检查了所有相关项目中的每个类以查找名称空间冲突.

【问题讨论】:

  • 有一个名为 BatchResizer 的类,但没有名为 [...].BatchResizer 的命名空间
  • 如果您粘贴所有相关代码的类标头,肯定会容易得多.. google msdn namespace
  • 这是一个有趣的部分,类名称与其命名空间相同,您可能必须这样做new BatchResizer.BatchResizer()。尽量避免任何名称与其父容器相同的东西。

标签: c# visual-studio namespaces


【解决方案1】:

BatchResizer 仍然是一个命名空间名称。如果它也与类同名,则必须更明确:

var batchResizer = new Components.BatchResizer();

您还可以在命名空间中添加 using 语句:

namespace BatchResizer.ConsoleRunner
{
    using Components;   

    internal class Program
    {        
        private static void Main(string[] args)
        {
            var batchResizer = new BatchResizer();
        }
    }
}

如果你想变得有点古怪,那么 C# 5.0 规范有这样的说法:

9.2 命名空间声明

...命名空间声明的限定标识符可以是单个标识符或由“.”分隔的标识符序列令牌。后一种形式允许程序定义一个嵌套的命名空间,而无需在词法上嵌套多个命名空间声明。例如,

namespace N1.N2
{
    class A {}
    class B {}
}

在语义上等价于

namespace N1
{
    namespace N2
    {
        class A {}
        class B {}
    }
}

因此,即使如您所说,BatchResizer 命名空间中没有声明 classBatchResizer 也被声明为命名空间。

【讨论】:

    【解决方案2】:

    首先,除非我遗漏了其中一个,否则这与关于这个确切主题的许多高度赞成的问题不同。他们都指出问题是我有一个与类同名的命名空间。情况并非如此(但确实如此)。

    BatchResizer 可能不是一个“最终”命名空间,但它仍然是一个命名空间

    Namespace : Foo.BatchResizer.Components
                Foo.BatchResizer.ConsoleRunner
    Class :     Foo.BatchResizer
    

    【讨论】:

      猜你喜欢
      • 2021-03-31
      • 2018-03-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 2013-02-07
      • 2016-02-09
      相关资源
      最近更新 更多