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

Suj*_*ith -1 c# architecture design-patterns

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

用例如下

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

namespace namespaceB
{
    Public Interface IInterface
    {
        Method1();
        Method2();
    }
}
Run Code Online (Sandbox Code Playgroud)

我们得到两种对象。

namespaceA.IInterface 对象 - 新实现

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

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

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

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

D S*_*ley 5

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

不过,您可能会使用适配器

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();}
}
Run Code Online (Sandbox Code Playgroud)