34 readonly Type declaringType;
35 readonly MethodInfo method;
36 readonly Type[] methodArgs;
48 this.declaringType = declaringType;
50 this.methodArgs = methodArgs;
53 public override bool Equals(
object obj)
57 && other.method.Equals(method)
58 && other.declaringType.Equals(declaringType)
59 &&
Util.ArrayEquals(other.methodArgs, methodArgs);
64 return declaringType.GetHashCode() * 33 ^ method.GetHashCode() ^
Util.GetHashCode(methodArgs);
69 get {
return method.ReturnType.BindTypeParameters(
this); }
79 var parameters = method.GetParameters();
80 for (
int i = 0; i < parameters.Length; i++)
86 internal override Type[] GetParameterTypes()
88 var parameterTypes = method.GetParameterTypes();
89 for (
int i = 0; i < parameterTypes.Length; i++)
90 parameterTypes[i] = parameterTypes[i].BindTypeParameters(method);
92 return parameterTypes;
95 internal override int ParameterCount
97 get {
return method.ParameterCount; }
102 get {
return method.CallingConvention; }
107 get {
return method.Attributes; }
112 return method.GetMethodImplementationFlags();
117 get {
return method.Name; }
122 get {
return declaringType.IsModulePseudoType ? null : declaringType; }
125 public override Module Module
127 get {
return method.Module; }
132 get {
return method.MetadataToken; }
141 throw new NotSupportedException();
146 get {
return method.__MethodRVA; }
156 get {
return method.IsGenericMethod; }
161 get {
return method.IsGenericMethodDefinition && methodArgs ==
null; }
168 if (declaringType.ContainsGenericParameters)
171 if (methodArgs !=
null)
172 foreach (var type
in methodArgs)
173 if (type.ContainsGenericParameters)
186 else if (declaringType.IsConstructedGenericType)
192 throw new InvalidOperationException();
202 if (methodArgs ==
null)
203 return method.GetGenericArguments();
205 return (Type[])methodArgs.Clone();
208 internal override Type GetGenericMethodArgument(
int index)
210 if (methodArgs ==
null)
211 return method.GetGenericMethodArgument(index);
213 return methodArgs[index];
216 internal override int GetGenericMethodArgumentCount()
218 return method.GetGenericMethodArgumentCount();
221 internal override MethodInfo GetMethodOnTypeDefinition()
223 return method.GetMethodOnTypeDefinition();
226 internal override int ImportTo(Emit.ModuleBuilder module)
228 if (methodArgs ==
null)
229 return module.ImportMethodOrField(declaringType, method.Name, method.MethodSignature);
231 return module.ImportMethodSpec(declaringType, method, methodArgs);
234 internal override MethodSignature MethodSignature
236 get {
return lazyMethodSignature ?? (lazyMethodSignature = method.MethodSignature.Bind(declaringType, methodArgs)); }
241 System.Diagnostics.Debug.Assert(methodArgs ==
null);
242 return new GenericMethodInstance(declaringType.BindTypeParameters(type), method,
null);
245 internal override bool HasThis
247 get {
return method.HasThis; }
252 var methods = method.__GetMethodImpls();
253 for (
int i = 0; i < methods.Length; i++)
254 methods[i] = (MethodInfo)methods[i].BindTypeParameters(declaringType);
259 internal override int GetCurrentToken()
261 return method.GetCurrentToken();
264 internal override bool IsBaked
266 get {
return method.IsBaked; }