我是生成类C
对象的库的客户,它实现了两个接口IA
和IB
,它们代表了我需要存储的永久连接。
我需要存储在调用之间返回的对象C
。
class Example
{
C _obj;
}
我想模拟C
用于测试的接口函数,但因为'C'继承了多个接口我没有接口IC
,所以我不能写:
class Example
{
Example(IC cInstance) { _obj = cInstance; }
IC _obj;
}
因此我无法轻易创建一个模拟对象来实现接口IA
和IB
,我可以用它来测试我的类Example
的工作原理。
如何在不使用强制转换或丑陋的情况下执行此操作?
答案 0 :(得分:5)
您可以使用泛型来完成:
class Example<T> where T : IA, IB
{
public Example(T instance)
{
this.obj = instance;
}
private T obj;
}
只要该类实现了两个接口,您就可以使用C
或您的模型与Example
:
class CMock : IA, IB
{
// ...
}
var myMockObj = new CMock();
var example = new Example<CMock>(myMockObj);
答案 1 :(得分:3)
如果对象继承了两个接口,可能应该存储两个引用:
class Example
{
Example(IA aInstance, IB bInstance) { _a = aInstance; _b = bInstance; }
IA _a;
IB _b;
}
那并不难看。相反。