0

使用反射时,无论是否可以提取对象或变量都是可能的static。例如

class MainApp
{
    static void Main()
    {            
        ConcretePrototype1 p1 = new ConcretePrototype1("I");
        ConcretePrototype1 c1 = (ConcretePrototype1)p1.Clone();
        Console.WriteLine("Cloned: {0}", c1.Id);
    }
}

是否可以提取

  1. p1两者c1都这样我可以检查它的类型

  2. 来自 p1.clone() 的方法调用

到目前为止,这就是我对包含 0 个元素的结果数组所做的事情

我正在从其他文件加载程序集

var name = System.Reflection.Assembly.LoadFile(open.FileName);
name.GetType("PrototypePattern.MainApp").GetFields(BindingFlags.GetField|BindingFlags.Instance)
4

1 回答 1

1

如果要提取所有字段(私有/公共/静态/非静态),请使用:

type.GetFields(BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)

编辑

您无法使用简单的反射在方法内部获取变量和方法调用。这需要实际读取方法的字节码并对其进行分析——这不是一件容易的事。

如果您仍然热衷于它,我建议您查看Mono.CecilCCI等库。

于 2012-05-27T17:28:25.507 回答