93 lines
3.4 KiB
C#
93 lines
3.4 KiB
C#
using System;
|
|
using System.Reflection;
|
|
using System.Reflection.Emit;
|
|
|
|
namespace System.Linq.Expressions
|
|
{
|
|
/// <summary>Provides the base class from which the classes that represent bindings that are used to initialize members of a newly created object derive.</summary>
|
|
// Token: 0x02000025 RID: 37
|
|
public abstract class MemberBinding
|
|
{
|
|
/// <summary>Initializes a new instance of the <see cref="T:System.Linq.Expressions.MemberBinding" /> class.</summary>
|
|
/// <param name="type">The <see cref="T:System.Linq.Expressions.MemberBindingType" /> that discriminates the type of binding that is represented.</param>
|
|
/// <param name="member">The <see cref="T:System.Reflection.MemberInfo" /> that represents a field or property to be initialized.</param>
|
|
// Token: 0x0600021B RID: 539 RVA: 0x0000B960 File Offset: 0x00009B60
|
|
protected MemberBinding(MemberBindingType binding_type, MemberInfo member)
|
|
{
|
|
this.binding_type = binding_type;
|
|
this.member = member;
|
|
}
|
|
|
|
/// <summary>Gets the type of binding that is represented.</summary>
|
|
/// <returns>One of the <see cref="T:System.Linq.Expressions.MemberBindingType" /> values.</returns>
|
|
// Token: 0x17000024 RID: 36
|
|
// (get) Token: 0x0600021C RID: 540 RVA: 0x0000B978 File Offset: 0x00009B78
|
|
public MemberBindingType BindingType
|
|
{
|
|
get
|
|
{
|
|
return this.binding_type;
|
|
}
|
|
}
|
|
|
|
/// <summary>Gets the field or property to be initialized.</summary>
|
|
/// <returns>The <see cref="T:System.Reflection.MemberInfo" /> that represents the field or property to be initialized.</returns>
|
|
// Token: 0x17000025 RID: 37
|
|
// (get) Token: 0x0600021D RID: 541 RVA: 0x0000B980 File Offset: 0x00009B80
|
|
public MemberInfo Member
|
|
{
|
|
get
|
|
{
|
|
return this.member;
|
|
}
|
|
}
|
|
|
|
/// <summary>Returns a textual representation of the <see cref="T:System.Linq.Expressions.MemberBinding" />.</summary>
|
|
/// <returns>A textual representation of the <see cref="T:System.Linq.Expressions.MemberBinding" />.</returns>
|
|
// Token: 0x0600021E RID: 542 RVA: 0x0000B988 File Offset: 0x00009B88
|
|
public override string ToString()
|
|
{
|
|
return ExpressionPrinter.ToString(this);
|
|
}
|
|
|
|
// Token: 0x0600021F RID: 543
|
|
internal abstract void Emit(EmitContext ec, LocalBuilder local);
|
|
|
|
// Token: 0x06000220 RID: 544 RVA: 0x0000B990 File Offset: 0x00009B90
|
|
internal LocalBuilder EmitLoadMember(EmitContext ec, LocalBuilder local)
|
|
{
|
|
ec.EmitLoadSubject(local);
|
|
return this.member.OnFieldOrProperty((FieldInfo field) => this.EmitLoadField(ec, field), (PropertyInfo prop) => this.EmitLoadProperty(ec, prop));
|
|
}
|
|
|
|
// Token: 0x06000221 RID: 545 RVA: 0x0000B9E0 File Offset: 0x00009BE0
|
|
private LocalBuilder EmitLoadProperty(EmitContext ec, PropertyInfo property)
|
|
{
|
|
MethodInfo getMethod = property.GetGetMethod(true);
|
|
if (getMethod == null)
|
|
{
|
|
throw new NotSupportedException();
|
|
}
|
|
LocalBuilder localBuilder = ec.ig.DeclareLocal(property.PropertyType);
|
|
ec.EmitCall(getMethod);
|
|
ec.ig.Emit(OpCodes.Stloc, localBuilder);
|
|
return localBuilder;
|
|
}
|
|
|
|
// Token: 0x06000222 RID: 546 RVA: 0x0000BA2C File Offset: 0x00009C2C
|
|
private LocalBuilder EmitLoadField(EmitContext ec, FieldInfo field)
|
|
{
|
|
LocalBuilder localBuilder = ec.ig.DeclareLocal(field.FieldType);
|
|
ec.ig.Emit(OpCodes.Ldfld, field);
|
|
ec.ig.Emit(OpCodes.Stloc, localBuilder);
|
|
return localBuilder;
|
|
}
|
|
|
|
// Token: 0x040000AA RID: 170
|
|
private MemberBindingType binding_type;
|
|
|
|
// Token: 0x040000AB RID: 171
|
|
private MemberInfo member;
|
|
}
|
|
}
|