использование пространства имен в C # из класса CLI / C ++ - PullRequest
0 голосов
/ 23 марта 2012

Это может быть вопрос C # -noob ...

Предположим, у меня есть следующий заголовок CLI / C ++:

namespace DotNet {
  namespace V1 {
    namespace X {


      public ref class AClass {
      public:

        AClass() {}
        void foo() {}

        static void bar() {}
      };
    }
  }

}

Затем из C # я делаю следующее:

using DotNet;
V1.X.AClass a = new V1.X.AClass();

Я получаю:

Program.cs (18,7): ошибка CS0246: имя типа или пространства имен 'V1' может не найден (вы пропустили директиву использования или сборку ссылка?)

То же самое с:

 using DotNet.V1;
 X.AClass a = new X.AClass();

Program.cs (18,7): ошибка CS0246: имя типа или пространства имен 'X' может не найден (вы пропустили директиву использования или сборку ссылка?)

Что работает:

 DotNet.V1.X.AClass a = new DotNet.V1.X.AClass();

или

 using DotNet.V1.X;
 AClass a = new AClass();

Так что я либо должен использовать полный путь к пространству имен, либо мне нужно открыть весь путь для доступа к классу. Что я могу с этим поделать? Я хотел бы иметь возможность открыть только его часть.

Ответы [ 2 ]

4 голосов
/ 23 марта 2012

Итак, я должен использовать полный путь к пространству имен или открыть весь путь для доступа к классу.

Да.

Могу ли я что-нибудь сделать с этим?

Не то, что я знаю.Почему бы вам не просто захотеть использовать директиву using для всего пространства имен?Разве это не самый простой подход?

Обратите внимание, что это не имеет ничего общего с C ++ / CLI.То же самое верно, независимо от того, каким является исходный язык - так что вы можете увидеть это и в C #:

namespace DotNet.V1.X
{
    public class AClass {}
}
1 голос
/ 24 марта 2012

Как сказал Джон Скит, вы должны включать полное пространство имен либо в оператор using, либо каждый раз, когда ссылаетесь на него в коде. Я рекомендую просто поместить полное пространство имен в оператор using.

Однако этот синтаксис можно получить с помощью псевдонима using, но он не добавляет ничего ценного вне синтаксиса.

using V1 = DotNet.V1;

...

   V1.X.AClass a = new V1.X.AClass();

Также, если вы используете C # версии 3.0 или выше, для ключевого слова var потребуется только ввести полное пространство имен справа от назначения.

var a = new DotNet.V1.X.AClass();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...