87 lines
2.3 KiB
C#
87 lines
2.3 KiB
C#
using System;
|
|
using System.Reflection;
|
|
using System.Reflection.Emit;
|
|
|
|
namespace System.Linq.Expressions
|
|
{
|
|
/// <summary>Represents accessing a field or property.</summary>
|
|
// 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;
|
|
}
|
|
|
|
/// <summary>Gets the containing object of the field or property.</summary>
|
|
/// <returns>An <see cref="T:System.Linq.Expressions.Expression" /> that represents the containing object of the field or property.</returns>
|
|
// Token: 0x17000026 RID: 38
|
|
// (get) Token: 0x06000224 RID: 548 RVA: 0x0000BA8C File Offset: 0x00009C8C
|
|
public Expression Expression
|
|
{
|
|
get
|
|
{
|
|
return this.expression;
|
|
}
|
|
}
|
|
|
|
/// <summary>Gets the field or property to be accessed.</summary>
|
|
/// <returns>The <see cref="T:System.Reflection.MemberInfo" /> that represents the field or property to be accessed.</returns>
|
|
// 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;
|
|
}
|
|
}
|