在反射某个类型的接口时,发现GetInterfaces获得的接口类不止本类的,还包括父类的,也就是递归获得所有接口。
比如 我定义了一个控件 TreeList : BaseContrl, INodeSubList。 BaseControl是基类,INodeSubList是接口
用GetInterfaces获取的样子却是这样
public class TreeList : BaseControl, IComponent, IDisposable, IOleControl, IOleObject, IOleInPlaceObject, IOleInPlaceActiveObject, IOleWindow, IViewObject, IViewObject2, IPersist, IPersistStreamInit, IPersistPropertyBag, IPersistStorage, IQuickActivate, ISupportOleDropSource, IDropTarget, ISynchronizeInvoke, IWin32Window, IArrangedElement, IBindableComponent, INodeSubList实际上中间的这些接口都是BaseControl的,有没有什么办法把这些过滤掉,我只要INodeSubList。

解决方案 »

  1.   

    提供一个笨办法:
    1.父类GetInterfaces2.再用当前类GetInterfaces3.两个相减
      

  2.   

    正解如下:                    Type[] inters = type.GetInterfaces();
                        foreach (Type inter in inters)
                        {
                            InterfaceMapping im = type.GetInterfaceMap(inter);
                            if (im.TargetMethods.Length > 0 &&
                                im.TargetMethods[0].DeclaringType == type)
                            {
                                Console.WriteLine("Yes");
                            }
                        }