Den*_*sen 6 .net reflection.emit
我正在尝试动态创建一个代理,所以我很满意Emit.因此,当我使用emit设置我的字段时,我还需要将isDirty字段boolan设置为true.
我怎样才能做到这一点 ?
Property Customer
{
set
{
this.customerName = value;
this.isDirty = true;
}
}
Run Code Online (Sandbox Code Playgroud)
发出代码:
FieldBuilder isDirtyField = myTypeBuilder.DefineField("isDirty", typeof(bool), FieldAttributes.Private);
// Define the "set" accessor method for CustomerName.
MethodBuilder custNameSetPropMthdBldr =
myTypeBuilder.DefineMethod("set_CustomerName",
getSetAttr,
null,
new Type[] { typeof(string) });
ILGenerator custNameSetIL = custNameSetPropMthdBldr.GetILGenerator();
custNameSetIL.Emit(OpCodes.Ldarg_0);
custNameSetIL.Emit(OpCodes.Ldarg_1);
custNameSetIL.Emit(OpCodes.Stfld, customerNameBldr);
{
custNameSetIL.EmitWriteLine("Start isDirty");
... do stuf here
custNameSetIL.EmitWriteLine("End isDirty");
}
custNameSetIL.Emit(OpCodes.Ret);
Run Code Online (Sandbox Code Playgroud)
这段代码正在运行,只要我没有尝试做isDirty字段,已经花了周末这个,我试图在这个论坛得到一些帮助.谢谢
//丹尼斯
我相信你想要的IL指令序列
custNameSetIL.Emit(OpCodes.Ldarg_0); // load this
custNameSetIL.Emit(OpCodes.Ldc_I4_1); // load true (same as integer 1)
custNameSetIL.Emit(OpCodes.Stfld, isDirtyField); // store into isDirty
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3504 次 |
| 最近记录: |