它只是我试图实现的服务定位器类型的模式,我想尝试将实现注册到它不属于的接口,如:
public void Add(Type interfaceType, object implementingObject)
{
// ... check for nulls
// NO GOOD
if(!implementingObject.GetType().IsAssignableFrom(interfaceType)...
// NO GOOD
if(!implementingObject.GetType().IsInstanceOf(interfaceType)...
// FINALLY!
if(!implementingObject.GetType().BaseType.IsAssignableFrom(interfaceType)...
// ... ok, add it
}
现在我最终想通过查看NUnit的isInstanceOf断言来使用BaseType.IsInstanceOf,但它似乎仍然是单一的。
有人可以解释为什么这有意义吗?有没有更简单的方法来做到这一点?
答案 0 :(得分:4)
查看它的方式是从左到右,就像通常用语言进行作业一样。
所以在C#中,相当于调用assigningTo.IsAssignableFrom(assigningFrom)
(或者你提到的任何其他方法)就是把它想象为“以下代码是否会起作用”:
<assigningTo type> variable = <instance of assigningFrom>;
将其应用于您的代码,您希望使用:
interfaceType.IsAssignableFrom(implementingObject.GetType())
interfaceType.IsAssignableFrom(implementingObject.GetType().BaseType)
您希望查看实现对象上的任何类型是否可以分配给接口类型的逻辑,或者换句话说,是否可以将实现对象分配给interfaceType。
答案 1 :(得分:0)
我想你想要:
interfaceType.IsAssignableFrom(implementingObject.GetType())
为什么可以从界面分配具体类型?