我的代码中有以下界面
public interface IDevTestable
{
bool RunTest(out List<Result> selfTestResults);
}
我有4个不同的类实现接口:
class A: IDevTestable
{
public bool RunTest(out List<Result> selfTestResults)
{
//get value1
}
}
class B: IDevTestable
{
public bool RunTest(out List<Result> selfTestResults)
{
//get value2
}
}
class C: IDevTestable
{
public bool RunTest(out List<Result> selfTestResults)
{
//get value3
}
}
class D: IDevTestable
{
public bool RunTest(out List<Result> selfTestResults)
{
//get value4
}
}
当我遍历我的代码中的所有程序集,并找到实现该接口以尝试调用 RunTest 方法的程序集时,无论如何它始终运行第一个实现。
如何从代码中选择我想在给定时间运行的特定实现?
这就是我运行代码以获取接口的所有实现的方式:
//dev is the driver name that has the implementation. I checked that I got all the driver names correctly.
foreach (object dev in Devices)
{
IDevTestable obj = dev as IDevTestable;
if (obj != null)
{
retVal = obj.RunTest(out indvTestResults);
}
}
每次只运行A类的实现。有什么建议我可能会丢失,或者可能添加以使它运行我希望它运行的特定实现?
答案 0 :(得分:3)
如何从代码中选择我想在给定时间运行的特定实现?
当你问这个时,你是指如何进行对象动态绑定?您不需要显式调用在其中一个类中实现的方法。只需要创建该类型的对象,其余的就由它自己完成。
你没有说清单是如何填充的,但是我想像这样填充它
Devices.Add(new A());
Devices.Add(new B());
Devices.Add(new C());
Devices.Add(new D());
此外,如果您确定每个设备都实现了您的接口IDevTestable,那么您最好将列表定义为
List<IDevTestable>
而不是
List<object>
只是为了确保列表中没有放置外来类型对象..
IDevTestable obj = dev as IDevTestable;
如果dev不是实现IDevTestable的类的实例,则obj将为null。