【问题标题】:Why does one class contained in a namespace not see another one contained in the same namespace?为什么命名空间中包含的一个类看不到同一命名空间中包含的另一个类?
【发布时间】:2011-03-21 20:52:48
【问题描述】:

我一直在开发一个应用程序,但遇到了一个我以前从未见过的异常​​错误。我有两个类,一个是 UserControl,一个是 Form,设置如下:

namespace NC
{
    public partial class Board : UserControl
    {
        // stuff
    }
}

namespace NC
{
    partial class Board
    {
        // this is the *.designer.cs file
    }
}

namespace NC
{
    public partial class MainForm : Form
    {
        // normal form stuff
    }
}

namespace NC
{
    partial class MainForm
    {
        // this is the *.designer.cs file. it has a Board added to it.
    }
}

它们都包含在同一个项目中,因此不应该成为问题。但是,我在编译时得到了这个:

The type name 'Board' does not exist in the type 'NC.NC'

我查看了表单的设计器文件,发现了这个:

this.Board1 = new NC.Board();

我删除了命名空间,它工作正常。每次我访问表单编辑器时,它都会再次添加它。我以前从来没有遇到过这个问题。是否有某种设置或我可以更改的东西?

【问题讨论】:

    标签: c# winforms namespaces


    【解决方案1】:

    如果您从其自己的命名空间中调用 [namespace].[class],那么 C# 假定您正在寻找一个名为 NC 的类,即使您没有此类。也就是说,它会自动将NC. 附加到您正在调用的任何不引用外部命名空间(System.[whatever])的东西上。因此,您对NC.Board 的调用将被转换为NC.NC.Board

    【讨论】:

      【解决方案2】:

      如果您使用命名空间来访问一个类,您要么需要使用完整的命名空间(可能是 ProjectName.NC.Board),要么它必须比您有权访问的任何命名空间更深。
      Board 与您已经在同一个命名空间中,因此您无需使用命名空间对其进行限定。

      【讨论】:

      • Winforms 设计器正在生成此代码,因此问题出在其他地方。
      • 啊,错过了一点。那样的话,我和你一样困惑。
      【解决方案3】:

      您的项目设置页面有一个默认命名空间。看看那里。

      事实上,默认命名空间名称不应该导致这种行为。例如,我刚刚创建了一个空的 Windows Forms 应用程序,它的默认命名空间设置为 WindowsFormsApplication1,即 VS 中的解决方案的名称。

      【讨论】:

      • Winforms 设计器在生成其代码时是否使用此默认命名空间?解决办法是什么?删除默认命名空间?
      • 正如 Mike Caron 回答的那样,看起来您有一个名为 NC 的类,它存在冲突和混乱。您的项目/解决方案中有这样的课程吗?
      【解决方案4】:

      你有一个名为NC 的类吗?如果这样做,最好将其重命名为其他名称。听起来编译器正在一个名为 NC 的类中寻找 Board,而不是命名空间 NC...

      【讨论】:

      • 这正是问题所在。该项目已远远超出其最初的范围。它最初只是一个经过一些基本测试的类。我忘记了该类与命名空间具有相同的名称。谢谢!
      • 迈克:好电话。 @Chris:查看此内容以了解为什么这是一个可怕的情况的更多详细信息:blogs.msdn.com/b/ericlippert/archive/tags/namespaces
      • @Eric:你的博文让我想到了它:D
      • @Eric:读得很好,谢谢!通常我不会在实际项目中。我最初只是编写了一个旨在测试我的想法的课程。然后,随着我继续有更多的想法并且我完全忘记了原来的课程,它已经超越了自己。感谢您的帮助。
      猜你喜欢
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 1970-01-01
      相关资源
      最近更新 更多