30 readonly Type declaringType;
44 this.declaringType = declaringType;
46 this.signature = signature;
49 MethodInfo Forwarder => TryGetForwarder() ??
throw new MissingMemberException(
this);
51 MethodInfo TryGetForwarder()
53 if (forwarder ==
null && !declaringType.__IsMissing)
55 var mb = declaringType.FindMethod(name, signature);
58 forwarder = ci.GetMethodInfo();
60 forwarder = (MethodInfo)mb;
68 get {
return TryGetForwarder() ==
null; }
73 get {
return signature.GetReturnType(
this); }
78 get {
return new ParameterInfoImpl(
this, -1); }
83 get {
return signature; }
86 internal override int ParameterCount
88 get {
return signature.GetParameterCount(); }
94 readonly MissingMethod method;
102 internal ParameterInfoImpl(MissingMethod method,
int index)
104 this.method = method;
110 get {
return index == -1 ? method.Forwarder.ReturnParameter : method.Forwarder.GetParameters()[index]; }
113 public override string Name
115 get {
return Forwarder.Name; }
118 public override Type ParameterType
120 get {
return index == -1 ? method.signature.GetReturnType(method) : method.signature.GetParameterType(method, index); }
123 public override ParameterAttributes Attributes
125 get {
return Forwarder.Attributes; }
128 public override int Position
130 get {
return index; }
133 public override object RawDefaultValue
135 get {
return Forwarder.RawDefaultValue; }
138 public override CustomModifiers __GetCustomModifiers()
141 ? method.signature.GetReturnTypeCustomModifiers(method)
142 : method.signature.GetParameterCustomModifiers(method, index);
145 public override bool __TryGetFieldMarshal(out FieldMarshal fieldMarshal)
147 return Forwarder.__TryGetFieldMarshal(out fieldMarshal);
152 get {
return method; }
155 public override int MetadataToken
157 get {
return Forwarder.MetadataToken; }
162 get {
return method.Module; }
165 public override string ToString()
167 return Forwarder.ToString();
174 var parameters =
new ParameterInfo[signature.GetParameterCount()];
175 for (
int i = 0; i < parameters.Length; i++)
176 parameters[i] =
new ParameterInfoImpl(
this, i);
181 internal override Type[] GetParameterTypes()
183 var parameterTypes =
new Type[signature.GetParameterCount()];
184 for (
int i = 0; i < parameterTypes.Length; i++)
185 parameterTypes[i] = signature.GetParameterType(i);
187 return parameterTypes;
192 get {
return Forwarder.Attributes; }
197 return Forwarder.GetMethodImplementationFlags();
202 return Forwarder.GetMethodBody();
207 get {
return Forwarder.__MethodRVA; }
212 get {
return signature.CallingConvention; }
217 var method = TryGetForwarder();
219 return method.ImportTo(module);
231 get {
return declaringType.IsModulePseudoType ? null : declaringType; }
234 public override Module Module
236 get {
return declaringType.Module; }
243 && other.declaringType == declaringType
244 && other.name == name
245 && other.signature.
Equals(signature);
250 return declaringType.GetHashCode() ^ name.GetHashCode() ^ signature.
GetHashCode();
253 internal override MethodBase BindTypeParameters(Type type)
255 var forwarder = TryGetForwarder();
256 if (forwarder !=
null)
257 return forwarder.BindTypeParameters(type);
264 get {
return Forwarder.ContainsGenericParameters; }
269 var method = TryGetForwarder();
271 return Forwarder.GetGenericArguments();
273 if (typeArgs ==
null)
275 typeArgs =
new Type[signature.GenericParameterCount];
276 for (
int i = 0; i < typeArgs.Length; i++)
280 return Util.Copy(typeArgs);
283 internal override Type GetGenericMethodArgument(
int index)
288 internal override int GetGenericMethodArgumentCount()
290 return Forwarder.GetGenericMethodArgumentCount();
295 return Forwarder.GetGenericMethodDefinition();
298 internal override MethodInfo GetMethodOnTypeDefinition()
300 return Forwarder.GetMethodOnTypeDefinition();
303 internal override bool HasThis
305 get {
return (signature.CallingConvention & (CallingConventions.HasThis | CallingConventions.ExplicitThis)) == CallingConventions.HasThis; }
315 get {
return signature.GenericParameterCount != 0; }
320 var method = TryGetForwarder();
322 return method.MakeGenericMethod(typeArguments);
329 get {
return Forwarder.MetadataToken; }
332 internal override int GetCurrentToken()
334 return Forwarder.GetCurrentToken();
337 internal override bool IsBaked
339 get {
return Forwarder.IsBaked; }