【发布时间】:2012-05-27 17:21:02
【问题描述】:
在使用反射时,无论static 与否,都可以提取对象或变量。例如
class MainApp
{
static void Main()
{
ConcretePrototype1 p1 = new ConcretePrototype1("I");
ConcretePrototype1 c1 = (ConcretePrototype1)p1.Clone();
Console.WriteLine("Cloned: {0}", c1.Id);
}
}
是否可以提取
p1和c1都可以检查它的类型来自 p1.clone() 的方法调用
到目前为止,这就是我对包含 0 个元素的结果数组所做的工作
我正在从其他文件加载程序集
var name = System.Reflection.Assembly.LoadFile(open.FileName);
name.GetType("PrototypePattern.MainApp").GetFields(BindingFlags.GetField|BindingFlags.Instance)
【问题讨论】:
-
它不在同一个程序集中。我正在从文件中加载程序集。
-
不能使用反射访问局部变量。
-
@HansPassant 如果必须,可以使用哪些方法来提取?无需使用 roslyn by microsoft 等复杂的方法
-
您错过了“做不到”的消息。调试器有一半的机会,当代码在发布模式下运行时没有。局部变量被抖动严重优化,将它们存储在 cpu 寄存器中是一个非常重要的速度改进。那和程序不能自己调试。 Roslyn 没有帮助,那是代码的编译器视图,而不是运行时视图。也许您错过的最重要的细节是局部变量的生存时间很短。当方法运行时,充其量是一手微秒。只有当您可以停止代码时,您才有希望看到它们的值。
-
本题与信息提取无关。您应该删除标签。 en.wikipedia.org/wiki/Information_extraction
标签: c# reflection instance information-extraction