Передайте метод (типа возврата void и без входных аргументов) в качестве параметра, используя C # - PullRequest
1 голос
/ 22 декабря 2010

Я хочу передать метод (типа возврата void и без входных аргументов) в качестве параметра, используя C #Ниже приведен мой пример кода.Как я могу это сделать?

public void Method1()
{
    ... do something
}

public int Method2()
{
    ... do something 
}

public void RunTheMethod([Method Name passed in here] myMethodName)
{

    myMethodName();
    ... do more stuff
}

Ответы [ 5 ]

7 голосов
/ 22 декабря 2010

System.Action будет соответствовать требованиям:

http://msdn.microsoft.com/en-us/library/system.action.aspx

У вас также есть различные универсальные версии Action для методов, которые имеют параметры, но имеют тип возврата void, и Funcдля методов, которые возвращают что-то.

Таким образом, ваш метод RunTheMethod будет выглядеть так:

public void RunTheMethod(Action myMethod)
{
    myMethod();
}

Тогда вы можете вызвать его с помощью:

RunTheMethod(Method1);
RunTheMethod(Method2);
1 голос
/ 22 декабря 2010

Как упоминалось ранее, вы можете использовать делегатов - в вашем случае вы можете использовать System.Action, чтобы сделать именно это.

public void RunTheMethod(System.Action myMethodName)
{

    myMethodName();
    ... do more stuff
}
0 голосов
/ 22 декабря 2010
//Delegate     
public delegate void OnDoStuff();

        class Program
        {
            static void Main(string[] args)
            {
                //Pass any of the method name here 
                Invoker(Method1);
                Console.ReadLine();
            }

            private static void Invoker(OnDoStuff method)
            {
                method.Invoke();
            }

            private static void Method1()
            {
                Console.WriteLine("Method1 from method " + i);
            }

            private static void Method2()
            {
                Console.WriteLine("Method2 from method " + i);
            }

            private static void Method3()
            {
                Console.WriteLine("Method3 from method " + i);
            }
        }
0 голосов
/ 22 декабря 2010

Вы должны взглянуть на Делегатов , чтобы получить решение для вашего запроса.В основном они служат указателем или ссылкой на функцию.

Также взгляните на этот пример для лучшего понимания.

0 голосов
/ 22 декабря 2010

Взгляните на делегатов , которые действуют как указатель на метод

...