Browse Source

例行提交

master
李敢 6 years ago
parent
commit
36f9e141ed
1 changed files with 12 additions and 2 deletions
  1. 12
    2
      EmitCreateDynamicProxy/DynamicProxyGenerator.cs

+ 12
- 2
EmitCreateDynamicProxy/DynamicProxyGenerator.cs View File

ilGetMethod.Emit(OpCodes.Ret); ilGetMethod.Emit(OpCodes.Ret);
//il of set method //il of set method
ILGenerator ilSetMethod = methodSet.GetILGenerator(); ILGenerator ilSetMethod = methodSet.GetILGenerator();
var nullLabel = ilSetMethod.DefineLabel();
ilSetMethod.Emit(OpCodes.Ldarg_0); ilSetMethod.Emit(OpCodes.Ldarg_0);
ilSetMethod.Emit(OpCodes.Ldarg_1); ilSetMethod.Emit(OpCodes.Ldarg_1);
ilSetMethod.Emit(OpCodes.Stfld, fieldBuilder); ilSetMethod.Emit(OpCodes.Stfld, fieldBuilder);
ilSetMethod.Emit(OpCodes.Ldarg_0); ilSetMethod.Emit(OpCodes.Ldarg_0);
ilSetMethod.Emit(OpCodes.Ldfld, fbModifiedPropertyNames); ilSetMethod.Emit(OpCodes.Ldfld, fbModifiedPropertyNames);
ilSetMethod.Emit(OpCodes.Ldstr, propertyInfo.Name);
ilSetMethod.Emit(OpCodes.Callvirt, modifiedPropertyNamesType.GetMethod("Add", new Type[] { typeof(string) }));
ilSetMethod.Emit(OpCodes.Dup);
ilSetMethod.Emit(OpCodes.Brtrue_S, nullLabel);
ilSetMethod.Emit(OpCodes.Pop); ilSetMethod.Emit(OpCodes.Pop);
var retLabel = ilSetMethod.DefineLabel();
ilSetMethod.Emit(OpCodes.Br_S, retLabel);
ilSetMethod.MarkLabel(nullLabel);
ilSetMethod.Emit(OpCodes.Ldarg_0);
ilSetMethod.Emit(OpCodes.Ldstr, propertyInfo.Name);
ilSetMethod.Emit(OpCodes.Newobj, typeof(PropertyChangedEventArgs));
ilSetMethod.Emit(OpCodes.Callvirt, pt.GetMethod("Invoke", new Type[] { typeof(object), typeof(PropertyChangedEventArgs) }));
ilSetMethod.Emit(OpCodes.Nop);
il.MarkLabel(retLabel);
ilSetMethod.Emit(OpCodes.Ret); ilSetMethod.Emit(OpCodes.Ret);


//设置属性的Get Set方法 //设置属性的Get Set方法

Loading…
Cancel
Save