Как вызвать какой-либо метод через Reflection без каких-либо параметров и каких-либо возвращаемых значений? - PullRequest
1 голос
/ 07 декабря 2011

Как вызвать какой-либо метод через 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 ]

3 голосов
/ 07 декабря 2011

Если вы вызываете это через 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);
    }
}
3 голосов
/ 07 декабря 2011

Прежде чем вы сможете вызвать универсальный метод, вам нужно указать его универсальный аргумент (ы). Таким образом, вы передаете тип, который хотите использовать в качестве общего аргумента:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...