Почему мне нужно включить часть моего пространства имен, несмотря на то, что у меня есть декларация использования - PullRequest
0 голосов
/ 17 марта 2011

У меня есть один проект в моем решении, направленный на предоставление некоторых основных функций. Это пространство имен MyCompanyName.ProductName.FunctionSet. На данный момент этот проект включает в себя два класса; customer.cs и core.cs. Базовый класс является статическим и содержит статический метод EntryPoint ().

У меня есть консольное приложение в решении. Его пространство имен - MyCompanyName.ProductName.TaskMan. Я создал ссылку на базовый проект выше и добавил директиву using для пространства имен.

Одна из строк в Main() - это Core.EntryPoint();. Обратите внимание, что он не включает какую-либо часть пространства имен. Код работал нормально.

Теперь, чтобы устранить ошибку (не удается разрешить символ 'EntryPoint'), мне нужно было изменить строку на FunctionSet.Core.EntryPoint();. Мне нужно было добавить последнюю часть пространства имен.

Зачем мне нужно было добавить эту часть пространства имен? Есть идеи, почему он вдруг перестал работать? Могу ли я что-нибудь сделать, чтобы пропустить часть пространства имен? Это не имеет большого значения, если я застрял с этим, но я действительно хочу знать, как и почему.

Ответы [ 2 ]

1 голос
/ 17 марта 2011

РЕДАКТИРОВАТЬ: я сохранил громоздкий бит ниже, но я не уверен, что это актуально.

Я подозреваю, что одно из них верно:

  • Ваше пространство имен не совсем то, что вы думаете (в частности, для Core)
  • У вас нет директивы using, которую вы считаете нужной

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


Пространства имен не разрешены относительно директив using, хотя они разрешены относительно текущего пространства имен. Например:

namespace Outer.Inner
{
    class Foo
    {
        public static void Bar() {}
    }
}

namespace Outer.OtherInner
{
    class Test1        
    {
        static void Method()
        {
            // Resolved to Outer.Inner.Foo.Bar()
            Inner.Foo.Bar();
        }
    }
}

namespace OtherOuter
{
    using Outer;

    class Test2
    {
        static void Main()
        {
            // This is invalid
            Inner.Foo.Bar();
        }
    }
}

Подробную информацию смотрите в разделе 3.8 спецификации C #.

0 голосов
/ 17 марта 2011

Вы пробовали добавить функцию в оператор использования в начале файла?

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