为什么命名空间中包含的一个类看不到包含在同一命名空间中的另一个类?

时间:2010-07-27 21:47:26

标签: c# winforms namespaces

我一直在处理一个应用程序,我遇到了一个我以前从未见过的异常​​错误。我有两个类,一个是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'

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

this.Board1 = new NC.Board();

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

4 个答案:

答案 0 :(得分:3)

你有一个名为NC的班级吗?如果你这样做,你应该把它重命名为其他东西。听起来好像编译器在名为NC的类中寻找Board,而不是命名空间NC ......

答案 1 :(得分:0)

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

实际上,默认的命名空间名称不应该导致此行为。例如,我刚刚创建了一个空的Windows窗体应用程序,其默认命名空间是使用WindowsFormsApplication1设置的,这是VS内部解决方案的名称。

答案 2 :(得分:0)

如果您使用命名空间来访问某个类,则需要使用完整命名空间(可能是ProjectName.NC.Board),或者它必须比您可以访问的任何命名空间更深。
Board与您已经存在的名称空间相同,因此您无需使用命名空间限定它。

答案 3 :(得分:0)

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