如何在没有任何参数和任何返回值的情况下通过Reflection调用某些方法?

时间:2011-12-07 14:01:14

标签: c# .net reflection

如何在没有任何参数和任何返回值的情况下通过Reflection调用某些方法?

以下是MSDN sample

// Define a class with a generic method.
public class Example
{
    public static void Generic<T>()
    {
        Console.WriteLine("\r\nHere it is: {0}", "DONE");
    }
}

什么应该在typeof(???)中呢?

MethodInfo miConstructed = mi.MakeGenericMethod(typeof(???));

谢谢!!!

2 个答案:

答案 0 :(得分:3)

在能够调用泛型方法之前,您需要指定其泛型参数。所以你传递了你想要用作泛型参数的类型:

public class Example
{
    public static void Generic<T>()
    {
        Console.WriteLine("The type of T is: {0}", typeof(T));
    }
}

class Program
{
    static void Main()
    {
        var mi = typeof(Example).GetMethod("Generic");
        MethodInfo miConstructed = mi.MakeGenericMethod(typeof(string));
        miConstructed.Invoke(null, null);
    }
}

应打印:

The type of T is: System.String

答案 1 :(得分:3)

如果您通过C#调用它,则需要提供类型,例如:

Example.Generic<int>();

该要求不会改变;简单地说,那条线将成为:

mi.MakeGenericMethod(typeof(int)).Invoke(null, null);

有关完整,有效的说明:

class Example
{
    public static void Generic<T>()
    {
        System.Console.WriteLine("\r\nHere it is: {0}", "DONE");
    }
    static void Main()
    {
        var mi = typeof (Example).GetMethod("Generic");
        mi.MakeGenericMethod(typeof(int)).Invoke(null, null);
    }
}