首页 > 解决方案 > 将接口实现对象从一个命名空间转换为另一个,因为两者具有相同的接口但不同的命名空间

问题描述

有没有办法将接口实现对象从一个命名空间转换为另一个,因为两者都具有相同的接口,但只有命名空间不同?

用例如下

namespace namespaceA
{
    Public Interface IInterface
    {
        Method1();
        Method2();
    }
}

namespace namespaceB
{
    Public Interface IInterface
    {
        Method1();
        Method2();
    }
}

我们得到两种对象。

namespaceA.IInterface 对象 - 新实现

namespaceB.IInterface 对象。- 作为遗留实现的一部分存在。

基于新的实现,我们只想处理代码中的一个对象,即 namespaceA.IInterface 对象。但是由于遗留的实现,我们也得到了 namespaceB.IInterface 对象。但是我们不想对遗留对象进行任何特定的处理,我们希望以与新对象和实现相同的方式处理。

因此,如果我们得到一个 namespaceB.IInterface 对象,是否有办法将其转换/转换为 namespaceA.IInterface 对象,前提是接口定义相同但仅存在于不同的命名空间中?

所以代码不必只担心遗留对象的处理。

标签: c#design-patternsarchitecture

解决方案


不 - 有两种完全不同的类型,没有任何关系。仅仅因为它们具有相同的成员名称并不意味着您可以从一个转换到另一个。

不过,您可以使用适配器

public class Adapter: namespaceA.IInterface
{
    private namespaceB.IInterface target;
    public Adapter(namespaceB.IInterface target)
    {
        this.Target = target
    }

    public void Method1() {this.Target.Method1();}
    public void Method2() {this.Target.Method2();}
}

推荐阅读