C #: Какой оператор `using` мне нужен здесь? - PullRequest
3 голосов
/ 09 февраля 2010

У меня есть проект в MS Visual Studio 2008 Pro. Я плохо знаком с окружающей средой и языком, так что прости нубистский вопрос.

У меня есть тип ControlCode:

namespace ShipAILab
{
    public abstract class ControlUnit {

        public enum ControlCode {
            NoAction = 0x00, 
            MoveLeft = 0x01,
            MoveUp = 0x02,
            MoveRight = 0x04,
            MoveDown = 0x08,
            Fire = 0x10,
        }

    }
}

Я хочу, чтобы это было доступно из другого класса, BoardUtils, который находится в том же ShipAILab пространстве имен:

    public static IList<ControlUnit.ControlCode> pathToPoint(IDictionary<CompPoint, int> dist, CompPoint destination) {
          ControlUnit.ControlCode code = ControlUnit.ControlCode.MoveLeft; // works
          ControlCode c2 = ControlCode.MoveDown; // how do I get this to work?
    }

Почему это не работает автоматически благодаря совместному использованию пространства имен? Мне нужно заявление using? Могу ли я "typedef", как в C, переименовать ControlUnit.ControlCode во что-то более краткое?

Ответы [ 3 ]

5 голосов
/ 09 февраля 2010

Ваш счет внутри класс ControlUnit.

Если вы хотите, чтобы он был доступен без ввода имени класса, переместите перечисление за пределы класса.

4 голосов
/ 09 февраля 2010

Переместить перечисление за пределы класса.

namespace ShipAILab
{
    public enum ControlCode {
        NoAction = 0x00, 
        MoveLeft = 0x01,
        MoveUp = 0x02,
        MoveRight = 0x04,
        MoveDown = 0x08,
        Fire = 0x10,
    }

    public abstract class ControlUnit {


    }
}
1 голос
/ 09 февраля 2010

Вам не нужно использовать оператор using, если они находятся в одном и том же пространстве имен.

Находятся ли они в одной и той же dll (один и тот же проект под VS2008). Если нет, то вам нужно добавить ссылку из pathToPoint dll к той, которая объявляет ControlUnit. Вы можете сделать это, найдя проект в обозревателе решений, щелкнув по нему правой кнопкой мыши и выбрав «Добавить ссылку ...»

Обновление

Если код, как показано, действительно компилируется, и вы хотите сделать его таким образом, чтобы вам не приходилось вводить ControlUnit.XYZ повсеместно, то вам нужно переместить объявление перечисления за пределы ControlUnit класс

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