繁体   English   中英

如何分配在2个不同名称空间中声明的相同类对象

[英]How to assign same class object declared in 2 different namespaces

我有一个带有类的Web服务项目(让我们将其称为webservice.classA)。

我有另一个类项目,该类项目生成一个dll,该dll在其自己的名称空间中引用该类并实例化它的一个实例(我们将其称为dlls名称空间dllnamespace)。

在另一个项目中,我要访问dll中的成员

例如

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”的方法。

您有名字冲突。 避免这种情况的一种受支持的方式(不要为您的类命名相同)是为其中一个类定义using别名

using webservice.classA = myWebserviceClassA;

您说得对...在命名方面确实存在设计缺陷。

让我们假设:

  • 您有一个名为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文章)

  • using指令的范围仅限于出现该指令的文件。

  • 创建using别名,以使将标识符限定为名称空间或类型变得更加容易。

  • 创建using指令以使用名称空间中的类型,而不必指定名称空间。 using指令不能使您访问嵌套在指定名称空间中的任何名称空间。

将复制定义行更改为:

dllnamespace.webservice.classA copy = null;

仅仅是问题-您不能在一个以上的命名空间中拥有一个类。 这就是名称空间的设计目的-防止不同人编写的具有相同名称的类出现别名。 您需要确定一个名称空间拥有该类,而另一个名称空间则要导入它。 或者,如果dll和Web服务是同一分布式应用程序的一部分,则它们应使用相同的名称空间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM