29 readonly Type declaringType;
42 this.declaringType = declaringType;
44 this.signature = signature;
47 FieldInfo Forwarder => TryGetForwarder() ??
throw new MissingMemberException(
this);
49 FieldInfo TryGetForwarder()
51 if (forwarder ==
null && !declaringType.__IsMissing)
52 forwarder = declaringType.FindField(name, signature);
59 get {
return TryGetForwarder() ==
null; }
64 get {
return Forwarder.Attributes; }
69 return Forwarder.__TryGetFieldOffset(out offset);
74 return Forwarder.GetRawConstantValue();
79 get {
return signature; }
84 var field = TryGetForwarder();
86 return field.ImportTo(module);
88 return module.ImportMethodOrField(declaringType, this.
Name, this.FieldSignature);
91 public override string Name
98 get {
return declaringType.IsModulePseudoType ? null : declaringType; }
101 public override Module Module
103 get {
return declaringType.Module; }
106 internal override FieldInfo BindTypeParameters(Type type)
108 var forwarder = TryGetForwarder();
109 if (forwarder !=
null)
110 return forwarder.BindTypeParameters(type);
117 get {
return Forwarder.MetadataToken; }
124 && other.declaringType == declaringType
125 && other.name == name
126 && other.signature.
Equals(signature);
131 return declaringType.GetHashCode() ^ name.GetHashCode() ^ signature.GetHashCode();
136 return FieldType.Name +
" " +
Name;
139 internal override int GetCurrentToken()
141 return Forwarder.GetCurrentToken();
144 internal override bool IsBaked
146 get {
return Forwarder.IsBaked; }