加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在类型上查找立即实现的接口

发布时间:2020-12-15 18:26:36 所属栏目:百科 来源:网络整理
导读:在以下场景中调用typeof(Bar).GetInterfaces()时,该方法返回IFoo和IBar. 接口IFoo {} 接口IBar:IFoo {} class Bar:IBar {} 有没有办法可以在Bar上找到直接界面(IBar)? 解决方法 不,在编译的代码中没有“立即”接口这样的东西.您的课程有效编译为: class
在以下场景中调用typeof(Bar).GetInterfaces()时,该方法返回IFoo和IBar.

接口IFoo {}
接口IBar:IFoo {}
class Bar:IBar {}

有没有办法可以在Bar上找到直接界面(IBar)?

解决方法

不,在编译的代码中没有“立即”接口这样的东西.您的课程有效编译为:
class Bar : IBar,IFoo { }

你无法区分这两者.您唯一能做的就是检查所有这些接口,看看两个或多个接口是否相互继承(即使在这种情况下,您也无法真正检查该类的作者是否已明确提及代码中的基接口是不是):

static IEnumerable<Type> GetImmediateInterfaces(Type type)
{
    var interfaces = type.GetInterfaces();
    var result = new HashSet<Type>(interfaces);
    foreach (Type i in interfaces)
        result.ExceptWith(i.GetInterfaces());
    return result;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读