And so you have the MethodDefinition that you want to call. You just have to
emit a call or callvirt instruction with the MethodDefinition as operand.
(Sorry I accidentally pressed the Send button.)

2011/5/2 Gábor Kozár <[email protected]>

> These extension methods from Mono.Rocks can be helpful (I think I copied
> them as-is, just with a different name).
>
>
>> public static TypeReference MakeGenericType(this TypeReference self,
>> params TypeReference[] arguments)
>> {
>>       if (self.GenericParameters.Count != arguments.Length)
>>           throw new ArgumentException();
>>
>>       var instance = new GenericInstanceType(self);
>>       foreach (var argument in arguments)
>>           instance.GenericArguments.Add(argument);
>>
>>       return instance;
>> }
>>
>
>
> public static MethodReference MakeHostInstanceGeneric(this MethodReference
>> self, params TypeReference[] arguments)
>
> {
>>       var reference = new MethodReference(self.Name, self.ReturnType,
>> self.DeclaringType.MakeGenericType(arguments))
>>       {
>>           HasThis = self.HasThis,
>>           ExplicitThis = self.ExplicitThis,
>>           CallingConvention = self.CallingConvention
>>       };
>>
>>       foreach (var parameter in self.Parameters)
>>           reference.Parameters.Add(new
>> ParameterDefinition(parameter.ParameterType));
>>
>>       foreach (var generic_parameter in self.GenericParameters)
>>           reference.GenericParameters.Add(new
>> GenericParameter(generic_parameter.Name, reference));
>>
>>       return reference;
>>  }
>>
>
> Then, assuming you have the TypeDefinition of MyClass<T, Y>:
>
> myClassTypeDef.Methods.Single(m => m.Name ==
> "Something").MakeHostInstanceGeneric(myModule.TypeSystem.Int32,
> myModule.TypeSystem.String);
>
> 2011/5/2 Hendry Luk <[email protected]>
>
>> I'm sure this question has been asked so many times before, but I can't
>> seem to find a satisfying answer for it .
>>
>> How do I get Cecil to emit a call to static method 'Something' on the
>> following generic class?
>>
>> public static class MyClass<T, Y>
>> {
>>     public static void Something(int a, string b, object c)
>>     {
>>     }
>> }
>>
>> And I intend to call MyClass<int, string>.Something(int, string, object);
>>
>> What's the right way to achieve that?
>>
>> Thanks before
>> Hendry
>> --
>> --
>> mono-cecil
>
>
>

-- 
--
mono-cecil

Reply via email to