我有一个带有类的webservice项目(让我们将其称为webservice.classA)。
我有另一个类项目生成一个dll,它在自己的命名空间中引用该类并实例化它的一个实例(让我们调用dll命名空间dllnamespace)。
在另一个项目中,我想访问dll中的成员
e.g。
using webservice;
namespace other_project
{
class B
{
classA copy = null;
//....
dllnamespace.dostuff(); // amongst other things instantiates a classA object
//....
copy = dllnamespace.getclassA(); // method to return classA member
我得到的编译器错误无法将类型从dllnamespace.webservice.classA转换为other_project.webservice.classA
我想我有一个基本的设计缺陷,但我认为必须有(?)一种在多个命名空间中声明/使用“webservice.classA”的方法。
答案 0 :(得分:2)
你有一个名字冲突。避免这种情况的支持方式(没有将类命名为相同)是为其中一个类定义using alias:
using webservice.classA = myWebserviceClassA;
答案 1 :(得分:2)
你是对的......在命名方面确实存在设计缺陷。
让我们假设:
你有一个名为的班级
MyClass
该类在命名空间中存在 两者 - abc.xyz.qwe.tyu.MyClass
并在命名空间中 - sed.qwe.dfg.ert.MyClass
解决方法是 -
using NS1 = abc.xyz.qwe.tyu.MyClass;
using NS2 = sed.qwe.dfg.ert.MyClass;
这样可以避免冲突。 此外,如果您有很长命名空间,也很有用。
进一步参考:(来自using
Directive上的MSDN文章)
使用指令的范围是 限于它所在的文件 出现。
创建使用别名,以便更轻松地将标识符限定为a 命名空间或类型。
创建 using 指令以使用命名空间中的类型,而无需指定命名空间。 using 指令不允许您访问嵌套在指定名称空间中的任何名称空间。
答案 2 :(得分:1)
将复制定义行更改为:
dllnamespace.webservice.classA copy = null;
答案 3 :(得分:-1)
这就是问题所在 - 你不能在一个以上的命名空间中拥有一个类。这就是名称空间的设计目的 - 防止不同人编写的具有相同名称的类别出现别名。您需要决定一个名称空间来拥有该类,而在另一个名称空间中导入它。或者,如果dll和Web服务是同一个分布式应用程序的一部分,那么它们应该使用相同的命名空间。