使用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();
所以要么我必须使用完整的名称空间路径,要么我必须打开所有的路径来访问类。对此我能做些什么吗?我希望只能打开它的一部分。
所以要么我必须使用完整的名称空间路径,要么我必须打开所有的路径来访问类。
是的。
对此我能做些什么吗?
我不知道。为什么不只想要整个命名空间的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();