public static SetMemberDelegate SetEmit(PropertyInfo propertyInfo) { var mi = propertyInfo.GetSetMethod(true); if (mi == null) { return(null); } var setter = FieldInvoker.CreateDynamicSetMethod(propertyInfo); var gen = setter.GetILGenerator(); gen.Emit(OpCodes.Ldarg_0); gen.Emit( propertyInfo.DeclaringType.IsValueType ? OpCodes.Unbox : OpCodes.Castclass, propertyInfo.DeclaringType); gen.Emit(OpCodes.Ldarg_1); gen.Emit( propertyInfo.PropertyType.IsValueType ? OpCodes.Unbox_Any : OpCodes.Castclass, propertyInfo.PropertyType); gen.EmitCall(mi.IsFinal ? OpCodes.Call : OpCodes.Callvirt, mi, (Type[])null); gen.Emit(OpCodes.Ret); return((SetMemberDelegate)setter.CreateDelegate(typeof(SetMemberDelegate))); }
public static GetMemberDelegate GetEmit(PropertyInfo propertyInfo) { var getter = FieldInvoker.CreateDynamicGetMethod(propertyInfo); var gen = getter.GetILGenerator(); gen.Emit(OpCodes.Ldarg_0); if (propertyInfo.DeclaringType.IsValueType) { gen.Emit(OpCodes.Unbox, propertyInfo.DeclaringType); } else { gen.Emit(OpCodes.Castclass, propertyInfo.DeclaringType); } var mi = propertyInfo.GetGetMethod(true); gen.Emit(mi.IsFinal ? OpCodes.Call : OpCodes.Callvirt, mi); if (propertyInfo.PropertyType.IsValueType) { gen.Emit(OpCodes.Box, propertyInfo.PropertyType); } gen.Emit(OpCodes.Ret); return((GetMemberDelegate)getter.CreateDelegate(typeof(GetMemberDelegate))); }
static TypeFields() { Instance.Type = typeof(T); Instance.PublicFieldInfos = typeof(T).GetPublicFields(); foreach (var fi in Instance.PublicFieldInfos) { try { var fnRef = FieldInvoker <T> .CreateExpressionRefSetter(fi);// fi.SetExpressionRef<T>(); Instance.FieldsMap[fi.Name] = new FieldAccessor( fi, PclExport.Instance.CreateGetter(fi), PclExport.Instance.CreateSetter(fi), delegate(ref object instance, object arg) { var valueInstance = (T)instance; fnRef(ref valueInstance, arg); instance = valueInstance; }); } catch (Exception ex) { Tracer.Instance.WriteError(ex); } } }
public override SetMemberDelegate CreateSetter(FieldInfo fieldInfo) { return (SupportsEmit ? FieldInvoker.SetEmit(fieldInfo) : SupportsExpression ? FieldInvoker.SetExpression(fieldInfo) : base.CreateSetter(fieldInfo)); }
public override GetMemberDelegate <T> CreateGetter <T>(FieldInfo fieldInfo) { return (SupportsEmit ? FieldInvoker.GetEmit <T>(fieldInfo) : SupportsExpression ? FieldInvoker.GetExpression <T>(fieldInfo) : base.CreateGetter <T>(fieldInfo)); }
public override MemberSetter CreateSetter(FieldInfo fieldInfo) { return (SupportsEmit ? FieldInvoker.CreateEmitSetter(fieldInfo) : SupportsExpression ? FieldInvoker.CreateExpressionSetter(fieldInfo) : base.CreateSetter(fieldInfo)); }
public override MemberGetter <T> CreateGetter <T>(FieldInfo fieldInfo) { return (SupportsEmit ? FieldInvoker <T> .CreateEmitGetter(fieldInfo) : SupportsExpression ? FieldInvoker <T> .CreateExpressionGetter(fieldInfo) : base.CreateGetter <T>(fieldInfo)); }
public override GetMemberDelegate CreateGetter(FieldInfo fieldInfo) { return (#if NET472 this.SupportsEmit ? FieldInvoker.GetEmit(fieldInfo) : #endif this.SupportsExpression ? FieldInvoker.GetExpression(fieldInfo) : base.CreateGetter(fieldInfo)); }
public override SetMemberDelegate CreateSetter(FieldInfo fieldInfo) { return (#if NETSTANDARD2_0 SupportsEmit ? FieldInvoker.SetEmit(fieldInfo) : #endif SupportsExpression ? FieldInvoker.SetExpression(fieldInfo) : base.CreateSetter(fieldInfo)); }
public override GetMemberDelegate <T> CreateGetter <T>(FieldInfo fieldInfo) { return (#if NETSTANDARD2_0 SupportsEmit ? FieldInvoker.GetEmit <T>(fieldInfo) : #endif SupportsExpression ? FieldInvoker.GetExpression <T>(fieldInfo) : base.CreateGetter <T>(fieldInfo)); }
public override SetMemberDelegate <T> CreateSetter <T>(FieldInfo fieldInfo) { return(this.SupportsExpression ? FieldInvoker.SetExpression <T>(fieldInfo) : base.CreateSetter <T>(fieldInfo)); }