- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 Mono.Cecil 在 Assembly 中查找派生自给定的类型。通常可以使用 IsAssignableFrom() 方法来完成,但我无法确定它在 Cecil 中是等效的。有没有这样的方法或其他方法来检查它?谢谢迈克
最佳答案
继承检查和“赋值兼容性”检查实际上是不同的东西。您要检查继承还是“分配兼容性”?
赋值兼容性包括很多东西,包括有符号/无符号转换、枚举到基类型的转换、char
至 short
转换、通用方差转换、从接口(interface)到 object
的转换, 从数组到 IList
和 IList<T>
以及它们的基本接口(interface)、数组协变、约束的通用参数,以及一大堆其他东西。
最好的办法是在 ECMA 规范中查找分配兼容性和“验证类型兼容性”规则以获得完整列表。
我猜出于您的特殊需求,您需要完整“作业兼容性检查”的某些子集。
不幸的是,Cecil 没有任何方法可以为您实现这一点,但它确实提供了足够的信息供您自己实现。
在使用 cecil 实现类似的东西时,您确实需要小心。特别是 TypeReference 类有一个“Resolve”方法,在某些情况下您需要调用该方法(用于为未解析的类型引用查找 TypeDefinition),但在其他情况下您不能调用该方法,因为它会深入挖掘类型树。您还需要处理“结构类型相等性”以比较泛型实例,并且在向上类型层次结构时必须处理泛型参数替换。
关于c# - Mono.Cecil type.IsAssignableFrom(derivedType) 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5675317/
我还没有发现任何类似这样的问题:但如果有人找到了,那就抱歉了。我一直在尝试使用 std::shared_ptr大大简化了内存管理,但是我遇到了一定是某种错误。 当我创建 DerivedType带有 s
不太清楚基础/派生的动态 List .主项目“Derived”引用了“Base”项目。基础项目工作正常,模组需要保持在最低限度。派生项目仅添加与服务的交互,但本身不修改基本功能。 基类: B1 {
我正在努力理解我可以做以下事情。我有一个带有静态列表的抽象类,它应该存储任何派生类的对象。同样在抽象类中,我有方法应该只处理调用派生类的对象。但是我该怎么做呢? GetType() 或 typeof(
有没有办法将静态方法放在可以返回派生类型的抽象类中? 静态方法是否甚至知道在 C# 中调用它的类型是什么? 例如,基类可以是 public abstract class MyBase { pu
我正在使用 Mono.Cecil 在 Assembly 中查找派生自给定的类型。通常可以使用 IsAssignableFrom() 方法来完成,但我无法确定它在 Cecil 中是等效的。有没有这样的方
我想知道是否有人能指出我正确的方向...... 我如何从 ReadOnlyCollection 转换至 ReadOnlyCollection没有迭代或“更新”副本? 我正在使用 .NET Framew
将采用派生类型的第一个参数的委托(delegate)转换为接收基类型的委托(delegate)的最佳方法是什么?我的意思是: Func original = ...; Func converted =
我是一名优秀的程序员,十分优秀!