private static void EmitSet(string name, TypeBuilder tb, FieldInfo field) { MethodBuilder set = tb.DefineMethod(name, MethodAttributes.Public | MethodAttributes.Virtual, Types.Void, new Type[] { Types.Object, Types.Object }); CodeEmitter ilgen = CodeEmitter.Create(set); ilgen.Emit(OpCodes.Ldarg_1); ilgen.Emit(OpCodes.Castclass, field.DeclaringType); ilgen.Emit(OpCodes.Ldarg_2); ilgen.Emit(OpCodes.Castclass, field.FieldType); ilgen.Emit(OpCodes.Volatile); ilgen.Emit(OpCodes.Stfld, field); ilgen.EmitMemoryBarrier(); ilgen.Emit(OpCodes.Ret); ilgen.DoEmit(); }