gpt4 book ai didi

c# - Mono.Cecil type.IsAssignableFrom(derivedType) 等效项

转载 作者:可可西里 更新时间:2023-11-01 09:11:17 27 4
gpt4 key购买 nike

我正在使用 Mono.Cecil 在 Assembly 中查找派生自给定的类型。通常可以使用 IsAssignableFrom() 方法来完成,但我无法确定它在 Cecil 中是等效的。有没有这样的方法或其他方法来检查它?谢谢迈克

最佳答案

继承检查和“赋值兼容性”检查实际上是不同的东西。您要检查继承还是“分配兼容性”?

赋值兼容性包括很多东西,包括有符号/无符号转换、枚举到基类型的转换、charshort转换、通用方差转换、从接口(interface)到 object 的转换, 从数组到 IListIList<T>以及它们的基本接口(interface)、数组协变、约束的通用参数,以及一大堆其他东西。

最好的办法是在 ECMA 规范中查找分配兼容性和“验证类型兼容性”规则以获得完整列表。

我猜出于您的特殊需求,您需要完整“作业兼容性检查”的某些子集。

不幸的是,Cecil 没有任何方法可以为您实现这一点,但它确实提供了足够的信息供您自己实现。

在使用 cecil 实现类似的东西时,您确实需要小心。特别是 TypeReference 类有一个“Resolve”方法,在某些情况下您需要调用该方法(用于为未解析的类型引用查找 TypeDefinition),但在其他情况下您不能调用该方法,因为它会深入挖掘类型树。您还需要处理“结构类型相等性”以比较泛型实例,并且在向上类型层次结构时必须处理泛型参数替换。

关于c# - Mono.Cecil type.IsAssignableFrom(derivedType) 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5675317/

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