Tag: typebuilder

reflection发射:如何为此构建构造函数

我想动态构建的代码如下: public class Sample { public Sample() { Items = new ObservableTestCollection(this); } public Sample(IEnumerable source) { Items = new ObservableTestCollection(this, source); } public ObservableTestCollection Items; } ObservableTestCollection的来源如下: public class ObservableTestCollection : ObservableCollection { public T Parent; public ObservableTestCollection(T parent) { Parent = parent; } public ObservableTestCollection(T parent, IEnumerable source) : base(source) { Parent = […]

生成一个带有参数的构造函数,并使用TypeBuilder调用base(argument)

我试图动态创建一个空构造函数,它接受一个参数,并使用TypeBuilder简单地调用base(参数)。 我的代码是这样的: (…) // Create a class derived from this class TypeBuilder typeBuilder = moduleBuilder.DefineType(“NewClass”, TypeAttributes.Class, this.GetType()); ConstructorInfo baseCtor = this.GetType().GetConstructor(new[] { typeof(int) }); // Define new ctor taking int ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, new[] { typeof(int) }); // Generate code to call base ctor passing int ILGenerator ctorIL = constructorBuilder.GetILGenerator(); ctorIL.Emit(OpCodes.Ldarg_0); ctorIL.Emit(OpCodes.Ldarg_1); ctorIL.Emit(OpCodes.Call, […]

从TypeBuilder创建具有基类和附加字段的动态类型会生成exception

我正在尝试基于仅包含公共字段的现有类型创建动态类型。 新的动态类型还必须从仅具有完全实现的方法的不同基类型inheritance。 我创建TypeBuilder指定基类型然后我将公共字段添加到它,最后我调用CreateType() 。 生成的错误消息是: “无法从程序集’MyDynamicAssembly,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null’加载类型’InternalType’,因为字段’first’未被赋予显式偏移量。” 对我来说,这意味着CreateType方法在基类中寻找公共字段“first”,这是一个问题,因为它不在那里。 为什么它认为添加的字段应该在基类中? 或者,我是否误解了这个例外? 这是代码: public class sourceClass { public Int32 first = 1; public Int32 second = 2; public Int32 third = 3; } public static class MyConvert { public static object ToDynamic(object sourceObject, out Type outType) { // get the public fields […]

使用TypeBuilder为基类创建传递构造函数

假设我有一个SpaceShip类,如下所示: public class SpaceShip { public SpaceShip() { } public SpaceShip(IRocketFuelSource fuelSource) { } } 我想使用TypeBuilder在运行时创建一个inheritance自SpaceShip的类型,并为SpaceShip中的每个类型定义一个构造函数。 除了将参数传递给父(“传递”构造函数)之外,我不需要构造函数实际执行任何操作。 例如,如果用C#表示,生成的类型看起来像这样: public class SpaceShipSubClass : SpaceShip { public SpaceShipSubClass() : base() { } public SpaceShipSubClass(IRocketFuelSource fuelSource) : base(fuelSource) { } } 为了使事情复杂化,我实际上并不知道生成类型将inheritance到哪个类直到运行时(因此我将不得不考虑任意数量的构造函数,可能使用默认参数)。 这可能吗? 我想如果我有一个总体方向可以解决这个问题,那就是我对TypeBuilder完全不TypeBuilder 。 谢谢!