- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试实现查看 MDBG 示例的托管调试器。
MDBG 能够解析给定范围内的函数名称,但它不考虑基类。
MDBG 正在这样做:
/// <summary>
/// Resolves a Function from a Module, Class Name, and Function Name.
/// </summary>
/// <param name="mdbgModule">The Module that has the Function.</param>
/// <param name="className">The name of the Class that has the Function.</param>
/// <param name="functionName">The name of the Function.</param>
/// <returns>The MDbgFunction that matches the given parameters.</returns>
public MDbgFunction ResolveFunctionName(MDbgModule mdbgModule, string className, string functionName) {
...
foreach (MethodInfo mi in t.GetMethods()) {
if (mi.Name.Equals(functionName)) {
func = mdbgModule.GetFunction((mi as MetadataMethodInfo).MetadataToken);
break;
}
}
return func;
}
虽然 Type.GetMethods() 被覆盖并具有此实现,但使用 IMetaDataImport.EnumMethods:
public override MethodInfo[] GetMethods(BindingFlags bindingAttr) {
ArrayList al = new ArrayList();
IntPtr hEnum = new IntPtr();
int methodToken;
try {
while (true) {
int size;
m_importer.EnumMethods(ref hEnum, (int) m_typeToken, out methodToken, 1, out size);
if (size == 0) {
break;
}
al.Add(new MetadataMethodInfo(m_importer, methodToken));
}
}
finally {
m_importer.CloseEnum(hEnum);
}
return (MethodInfo[]) al.ToArray(typeof (MethodInfo));
}
问题是 m_importer.EnumMethods()枚举表示指定类型方法的 MethodDef 标记,但我对类层次结构中的所有方法感兴趣。
如何获取类层次结构中定义的所有方法? (显然不能使用反射等常用方法,因为我正在分析其他过程中定义的类型)
我对互操作和深层 CLR/CIL 结构的了解有限,这对找到正确的方法造成了障碍。
欢迎提出任何意见/建议!
问候,
最佳答案
GetTypeProps将在 ptkExtends 中返回基本类型的元数据标记,您可以使用它来遍历继承树并在进行时从每个方法中收集方法。
但是请注意,元数据 token 可能不是 TypeDef。它可以是 TypeRef(要求您解析类型)或 TypeSpec(要求您解析类型签名并提取适当的 TypeDef/TypeRef)。
关于c# - 使用 IMetaDataImport EnumMethods 获取基类层次结构方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38586598/
我正在尝试实现查看 MDBG 示例的托管调试器。 MDBG 能够解析给定范围内的函数名称,但它不考虑基类。 MDBG 正在这样做: /// /// Resolves a Functi
EnumMethods.xml 有问题。我将它用于某些界面,并且 this映射按预期工作。但是,如果我有另一个扩展原始接口(interface)的接口(interface),则映射不起作用,我会收到以
我是一名优秀的程序员,十分优秀!