Files
2026-06-04 11:42:34 +02:00

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;
}
}