| 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方法 |