这可能是一个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();
所以要么我必须使用完整的命名空间路径,要么我必须打开所有访问该类的路径。我能做些什么吗? 我希望能够只打开它的一部分。
答案 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();