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

本文关键字:命名空间 类中 CLI C++ 使用 | 更新日期: 2023-09-27 18:28:54

这可能是一个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指令或程序集参考?)

同:

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

Program.cs(18,7):错误CS0246:类型或命名空间名称"X"可能找不到(是否缺少using指令或程序集参考?)

有效的是:

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

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

所以要么我必须使用完整的名称空间路径,要么我必须打开所有的路径来访问类。对此我能做些什么吗?我希望只能打开它的一部分。

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

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

是的。

对此我能做些什么吗?

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

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

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

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