【发布时间】:2015-02-16 08:41:07
【问题描述】:
要使用Reflection.Emit 创建类的实例,我需要发出OpCodes.Newobj,但是它需要创建类的构造函数。因此,如果我编写自己的编译器,如何为创建源代码(而不是运行时库)中定义的另一个类的实例的方法生成代码?
我在 2 遍中进行代码生成,首先我为我拥有的每个类创建 TypeBuilder,并向它们添加方法存根,以便在第二遍期间可以引用它们。但是我不能为这些存根调用TypeBuilder.CreateType,因为我会得到一个异常,Reflection.Emit 需要定义所有方法并具有主体。但与此同时,我无法为需要创建在源代码中定义的类的实例的方法完成代码生成。
那么,我该如何为此创建代码:
class Foo
{
}
class Bar
{
Foo DoSomething()
{
return new Foo();
}
}
还有这个:
class Foo
{
public Foo Create()
{
return new Foo();
}
}
【问题讨论】:
-
这可以通过 Reflection.Emit 实现,但并非编译器可能需要执行的所有任务都可以:blogs.msdn.com/b/lucian/archive/2009/11/29/…
标签: c# reflection.emit