我用 Mono.Cecil 解析一个类型。如何检查 im 解析的类型是否正在访问其他类的 getter 方法?
为了直接访问这些字段,我找到了一个解决方案:
foreach (MethodDefinition method in type.Methods)
{
foreach (Instruction instruction in method.Body.Instructions)
{
if (instruction.OpCode == OpCodes.Ldfld)
{
FieldReference field = instruction.Operand as FieldReference;
if (fields.Contains(field.ToString()) && !accesses.Contains(field.ToString()))
{
accesses.Add(field.ToString());
Console.WriteLine("Class " + type.Name + " accesses field " + field.Name + " of a foreign class.");
}
}
}
}
但是如果通过getter方法访问另一个类的字段,我该如何解决这个问题?
或者为了简化问题:如何使用 CIL 指令确定方法是否是 getter 方法?以及如何检测返回哪个字段?