public override void Implement(DynamicTypeBuilder config, TypeBuilder typeBuilder) { // GET method il var baseProperty = typeBuilder.BaseType.GetProperty(this.MemberName); var getMethodIlGenerator = PropertyGetMethod.GetILGenerator(); if (HasBase) { getMethodIlGenerator.Emit(OpCodes.Ldarg_0); getMethodIlGenerator.Emit(OpCodes.Call, baseProperty.GetGetMethod()); getMethodIlGenerator.Emit(OpCodes.Ret); } else { getMethodIlGenerator.Emit(OpCodes.Ldarg_0); getMethodIlGenerator.Emit(OpCodes.Ldfld, this.BackingField); getMethodIlGenerator.Emit(OpCodes.Ret); } // SET method il if (!IsReadOnly) { var setMethodIlGenerator = PropertySetMethod.GetILGenerator(); Label returnLabel; Label originalReturn = returnLabel = setMethodIlGenerator.DefineLabel(); foreach (var interceptor in this.SetInterceptors) { interceptor.Intercept(this, PropertySetMethod, setMethodIlGenerator, ref returnLabel); } if (HasBase) { setMethodIlGenerator.Emit(OpCodes.Ldarg_0); setMethodIlGenerator.Emit(OpCodes.Ldarg_1); setMethodIlGenerator.Emit(OpCodes.Call, baseProperty.GetSetMethod()); } else { setMethodIlGenerator.Emit(OpCodes.Ldarg_0); setMethodIlGenerator.Emit(OpCodes.Ldarg_1); setMethodIlGenerator.Emit(OpCodes.Stfld, BackingField); } setMethodIlGenerator.Emit(OpCodes.Br_S, returnLabel); setMethodIlGenerator.MarkLabel(originalReturn); setMethodIlGenerator.Emit(OpCodes.Ret); } }
public PropertyAccessorInfo(PropertyGetMethod getMethod, PropertySetMethod setmethod) { _getMethod = getMethod; _setMethod = setmethod; }
public _ValueParameter(PropertySetMethod parent) : base(parent, parent.Parent.Assembly) { }