소스 검색

例行提交

master
李敢 6 년 전
부모
커밋
36f9e141ed
1개의 변경된 파일12개의 추가작업 그리고 2개의 파일을 삭제
  1. 12
    2
      EmitCreateDynamicProxy/DynamicProxyGenerator.cs

+ 12
- 2
EmitCreateDynamicProxy/DynamicProxyGenerator.cs 파일 보기

@@ -178,14 +178,24 @@ namespace EmitCreateDynamicProxy
ilGetMethod.Emit(OpCodes.Ret);
//il of set method
ILGenerator ilSetMethod = methodSet.GetILGenerator();
var nullLabel = ilSetMethod.DefineLabel();
ilSetMethod.Emit(OpCodes.Ldarg_0);
ilSetMethod.Emit(OpCodes.Ldarg_1);
ilSetMethod.Emit(OpCodes.Stfld, fieldBuilder);
ilSetMethod.Emit(OpCodes.Ldarg_0);
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);
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);

//设置属性的Get Set方法

Loading…
취소
저장