假设我有一个接口继承树:
我父>我父>我父>我父
我将如何:
查找实现iparent的类
确定类的最近祖先,该类也是IParent的子级。
例如:

var myClass = FindImplementor<IParent>();
var myInterface = ClosestAncestor<IParent, myclass>();

我不希望创建与上述签名匹配的函数那只是为了澄清。
iParent的子代以及实现类位于动态加载的程序集中。我不确定那会不会有什么不同。

最佳答案

您可以使用as关键字并检查是否为空。
例子:

var someObject = GetMeSomething();  //returns some IParent/IChild/IGrandChild

if ((someObject as IParent) != null)
    if ((someObject as IChild) != null)
    {
        if ((someObject as IGrandChild) != null)
        {
            //you have an IGrandChild
        }
        else
        {
            //you have an IChild
        }
    }
    else
    {
        //you have an IParent
    }
}
//you have something other than your interface hierarchy

实际上,我并不喜欢这个主意,但我想到了这个尝试识别链有很多问题。想到了多个实现链。

10-04 20:52