在CLI / C ++类的C#中使用命名空间

时间:2012-03-23 19:46:39

标签: c# c++-cli

这可能是一个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 个答案:

答案 0 :(得分:4)

  

所以要么我必须使用完整的命名空间路径,要么我必须打开所有访问该类的路径。

  

我能做些什么吗?

不是我知道的。为什么只想要整个命名空间的using指令?这不是最简单的方法吗?

请注意,这与C ++ / CLI无关。无论源语言是什么都是如此 - 所以你也可以用C#看到它:

namespace DotNet.V1.X
{
    public class AClass {}
}

答案 1 :(得分:1)

正如Jon Skeet所说,你必须在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();