c# - 将接口实现对象从一个命名空间转换为另一个,因为两者具有相同的接口但不同的命名空间
问题描述
有没有办法将接口实现对象从一个命名空间转换为另一个,因为两者都具有相同的接口,但只有命名空间不同?
用例如下
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 对象,前提是接口定义相同但仅存在于不同的命名空间中?
所以代码不必只担心遗留对象的处理。
解决方案
不 - 有两种完全不同的类型,没有任何关系。仅仅因为它们具有相同的成员名称并不意味着您可以从一个转换到另一个。
不过,您可以使用适配器:
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();}
}
推荐阅读
- javascript - 如何执行批量 Upsert
- c# - 如何找到孩子的父对象并启用真正的孩子?
- php - LARAVEL:像高级程序员一样设计模板的最佳实践是什么
- mongodb - 只有两个服务器实例的 MongoDB 复制和故障转移
- python - 如何矢量化以删除 Python 中的 for 循环?
- python - 将具有不同“年份”列的 Python 数据框转换为连续时间序列
- docker - 用 Apache NiFi Docker 容器中的控制台日志替换日志文件
- javascript - 输出图像不出现
- php - PayPal Checkout 与智能支付按钮的集成
- function - 您无权读取 console.cloud.google.com 中的存档