我只是花了好几个小时被一个NullReferenceException
弄糊涂了,我认为那里不应该是一个人。我正在构建一个类似的类:
public class MyClass : MyBase<Foo>
{
public MyClass()
{
base.Method(Foo.StaticField);
}
}
,其中
public class MyBase<T>
{
private SomeObject bar = new SomeObject();
public void Method(object o)
{
this.bar.AnotherMethod(o); // exception thrown here
}
}
基本上我的IL如下:
ctorIl.Emit(OpCodes.Ldarg_0);
ctorIl.Emit(OpCodes.Ldsfld, staticField);
ctorIl.Emit(OpCodes.Box, typeof(FieldType));
ctorIl.Emit(OpCodes.Call, parentMethod);
ctorIl.Emit(OpCodes.Ret);
我终于认为必须是bar
没有被实例化。我在C#中构建了我的类并编译它,发现唯一的区别是以下应该高于上面的IL:
ctorIl.Emit(OpCodes.Ldarg_0);
ctorIl.Emit(OpCodes.Call, parentCtor);
// as above
使用这些行,我的代码现在可以正常工作了。
所以我的问题是:
答案 0 :(得分:6)
请注意,您实际上可以在单个方法中发出一个简单的构造函数(包括基本调用):
typeBuilder.DefineDefaultConstructor();