gpt4 book ai didi

c# - 判断派生类是否实现了以自身为泛型参数的泛型接口(interface)

转载 作者:行者123 更新时间:2023-11-30 22:17:51 25 4
gpt4 key购买 nike

我在 SO 上看到过类似问题的答案,但没有找到解决以下所有标准的答案。

B继承A时,如何判断B类是否满足以下条件:

  • [B] 未实现任何[additional] 接口(interface)(通用或非通用)。
  • [A] 以自己的类型作为泛型参数实现泛型接口(interface)?

以下

object o = new SomeObject();
bool result = (o.GetType().GetInterfaces()[0] == typeof(IKnownInterface<???>));
// ??? should be typeof(o). How to achieve this?

我知道我可以从类似于 "NameSpace.ClassName+IKnownInterface'1[[SomeType, ModuleName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] 的类型中获取接口(interface)名称字符串]" 但这似乎不直观或安全。此外,'1 表示法是基于用于该接口(interface)的泛型类型的数量递增的。

我要么以错误的方式解决这个问题,要么在这里遗漏了一些愚蠢的东西。请指教。

最佳答案

这应该可以解决问题

//get the two types in question
var typeB = b.getType()
var typeA = typeB.BaseType;
var interfaces = typeA.GetInterfaces();

//if the length are different B implements one or more interfaces that A does not
if(typeB.GetInterfaces().length != interfaces.length){
return false;
}

//If the list is non-empty at least one implemented interface satisfy the conditions
return (from inter in interfaces
//should be generic
where inter.IsGeneric
let typedef = inter.GetGenericTypeDefinition()
//The generic type of the interface should be a specific generic type
where typedef == typeof(IKnownInterface<>) &&
//Check whether or not the type A is one of the type arguments
inter.GetGenericTypeArguments.Contains(typeA)).Any()

关于c# - 判断派生类是否实现了以自身为泛型参数的泛型接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16528082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com