using System; using System.Reflection; using System.Reflection.Emit; namespace System.Linq.Expressions { /// Represents accessing a field or property. // Token: 0x02000027 RID: 39 public sealed class MemberExpression : Expression { // Token: 0x06000223 RID: 547 RVA: 0x0000BA70 File Offset: 0x00009C70 internal MemberExpression(Expression expression, MemberInfo member, Type type) : base(ExpressionType.MemberAccess, type) { this.expression = expression; this.member = member; } /// Gets the containing object of the field or property. /// An that represents the containing object of the field or property. // Token: 0x17000026 RID: 38 // (get) Token: 0x06000224 RID: 548 RVA: 0x0000BA8C File Offset: 0x00009C8C public Expression Expression { get { return this.expression; } } /// Gets the field or property to be accessed. /// The that represents the field or property to be accessed. // Token: 0x17000027 RID: 39 // (get) Token: 0x06000225 RID: 549 RVA: 0x0000BA94 File Offset: 0x00009C94 public MemberInfo Member { get { return this.member; } } // Token: 0x06000226 RID: 550 RVA: 0x0000BA9C File Offset: 0x00009C9C internal override void Emit(EmitContext ec) { this.member.OnFieldOrProperty(delegate(FieldInfo field) { this.EmitFieldAccess(ec, field); }, delegate(PropertyInfo prop) { this.EmitPropertyAccess(ec, prop); }); } // Token: 0x06000227 RID: 551 RVA: 0x0000BAE0 File Offset: 0x00009CE0 private void EmitPropertyAccess(EmitContext ec, PropertyInfo property) { MethodInfo getMethod = property.GetGetMethod(true); if (!getMethod.IsStatic) { ec.EmitLoadSubject(this.expression); } ec.EmitCall(getMethod); } // Token: 0x06000228 RID: 552 RVA: 0x0000BB14 File Offset: 0x00009D14 private void EmitFieldAccess(EmitContext ec, FieldInfo field) { if (!field.IsStatic) { ec.EmitLoadSubject(this.expression); ec.ig.Emit(OpCodes.Ldfld, field); } else { ec.ig.Emit(OpCodes.Ldsfld, field); } } // Token: 0x040000B0 RID: 176 private Expression expression; // Token: 0x040000B1 RID: 177 private MemberInfo member; } }