Почему один класс, содержащийся в пространстве имен, не видит другой класс, содержащийся в том же пространстве имен? - PullRequest
4 голосов
/ 28 июля 2010

Я работал над приложением, и я столкнулся с необычной ошибкой, которую я никогда раньше не видел. У меня есть два класса, один из которых UserControl, а другой форма, настроенный так:

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();

Я удаляю пространство имен, и оно работает нормально. Каждый раз, когда я получаю доступ к редактору форм, он добавляет его снова. У меня никогда не было проблем с этим раньше. Есть ли какие-то настройки или что-то, что я могу изменить?

Ответы [ 4 ]

3 голосов
/ 28 июля 2010

У вас есть класс с именем NC? Если вы это сделаете, вы бы хорошо, чтобы переименовать его в другое. Похоже, компилятор ищет Board внутри класса с именем NC, а не пространства имен NC ...

0 голосов
/ 28 июля 2010

Если вы вызываете [namespace]. [Class] из своего собственного пространства имен, C # предполагает, что вы ищете класс с именем NC, даже если у вас его нет. То есть он автоматически добавляет NC. ко всему, что вы вызываете, но не ссылается на внешнее пространство имен (System.[whatever]). Таким образом, ваш звонок на NC.Board переводится на NC.NC.Board

0 голосов
/ 28 июля 2010

Если вы используете пространство имен для доступа к классу, вам нужно либо использовать полное пространство имен (которое, вероятно, ProjectName.NC.Board), либо оно должно быть глубже, чем любое пространство имен, к которому у вас есть доступ.
Доскав том же пространстве имен, в котором вы уже находитесь, поэтому вам не нужно указывать его в пространстве имен.

0 голосов
/ 28 июля 2010

Ваша страница настроек проекта имеет пространство имен по умолчанию.Взгляните туда.

На самом деле, имя пространства имен по умолчанию не должно вызывать такое поведение.Например, я только что создал пустое приложение Windows Forms, и его пространство имен по умолчанию задано с помощью WindowsFormsApplication1, то есть имени решения внутри VS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...