GetInterfaces的困惑

faib920 2009-06-26 09:32:14
在反射某个类型的接口时,发现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。
...全文
95 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
faib920 2009-07-25
  • 打赏
  • 举报
回复
正解如下:

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");
}
}
threenewbee 2009-06-27
  • 打赏
  • 举报
回复
ls正解。
xlievo 2009-06-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sl2161 的回复:]
提供一个笨办法:
1.父类GetInterfaces

2.再用当前类GetInterfaces

3.两个相减
[/Quote]

这个比较牛
sl2161 2009-06-26
  • 打赏
  • 举报
回复
提供一个笨办法:
1.父类GetInterfaces

2.再用当前类GetInterfaces

3.两个相减
faib920 2009-06-26
  • 打赏
  • 举报
回复
唉唉,高手还不来,结帐走人了
faib920 2009-06-26
  • 打赏
  • 举报
回复
再不顶要沉下去啦,高手在哪里

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧