在运行时动态创建具有与其所有者相同类型的字段的类型

时间:2012-12-20 05:45:40

标签: c# reflection

所以我目前正在编写在运行时生成对象的代码。很像This Q&A

但是,我无法找到有关动态创建嵌入了相同类型的类型的任何信息。类似的东西:

public class Foo
{
    private Foo _Parent

    public Foo()
    {}

    public Foo Parent
    {
        get { return _Parent; }
        set { _Parent = value; }
    }
}

有没有办法在c#中使用反射或发射?

提前致谢。

1 个答案:

答案 0 :(得分:2)

Today I learned您可以将TypeBuilder投射到Type以获取它将要构建的类型的句柄:

TypeBuilder tb = // get from a ModuleBuilder or wherever
Type typeImAboutToBuild = (Type)tb;

FieldBuilder fb = tb.DefineField(
    "_Parent", typeImAboutToBuild, FieldAttributes.Private)

修改:TypeBuilder实际Type继承,而不是explicitimplicit转化操作;你甚至不需要演员:

TypeBuilder tb = //whatever
FieldBuilder fb = tb.DefineField("_Parent", tb, FieldAttributes.Private)