【问题标题】:C# Namespace, Folders, Compiler ErrorC# 命名空间、文件夹、编译器错误
【发布时间】:2017-12-06 20:23:04
【问题描述】:

我正在使用 VS 2017 v15.5.0。

我有一个名为Con_02 的最小控制台项目。这个项目中主类的命名空间就是Con_02(类如下所示)。

在这个项目中,我添加了一个名为Business 的新文件夹。在Business 文件夹中,我创建了一个名为Employee 的类。 VS 为Employee 类生成的默认命名空间是Con_02.Business。我将此命名空间简化为Business

回到我的主类中,我实例化了Employee。这是我完整的主要课程:

namespace Con_02 {
    class Program {
        Business.Employee e1 = new Business.Employee();

        private static void Main() { }
    }
}

到目前为止,一切都很好。一切都会编译。

现在,我在Business 文件夹中创建另一个类Company。 VS 生成一个命名空间,Con_02.Business

现在,Con_02.Program 主类不再编译。具体来说,之前编译得很好的 Business.Employee 对象的创建给了我一个编译器错误:

命名空间“Con_02.Business”中不存在类型或命名空间名称“Employee”(您是否缺少程序集引用?)

我不是在问如何解决这个问题,而是我试图理解为什么编译器似乎假定一个相对于Con_02 的命名空间。

【问题讨论】:

  • 这就是为什么你不想要重复的命名空间名称。试试global::Business.Employee
  • 按照上面的建议添加using Businessglobal::。但最好不要使用这样的命名空间。

标签: c# compiler-errors namespaces


【解决方案1】:

由于您正在创建一个名为 Con_02.Business 的新命名空间,其中包含 Company 类,因此 Business.Employee 被认为位于 Con_02.Business 命名空间下,但 Con_02.Business 只包含 Company 类。

最好改变

namespace Con_02.Business
{
    class Company
    {
    }
}

namespace Business
{
    class Company
    {
    }
}

或者直接使用Employee e1 = new Employee();

记住命名空间只是对类进行分组。

【讨论】:

  • 是的,我知道发生了什么以及如何“修复”它,但编译器假设 Employee 必须与 Company 位于同一命名空间中似乎很奇怪。我不喜欢它。
  • 所以只需使用 Employee e1 = new Employee();那么
【解决方案2】:

添加

using Business;

Program类的顶部。

并从您的 Employee 实例中删除业务部分。

或。为所有类使用相同的命名空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-28
    • 2017-12-16
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多