Как я могу передать вызов функции? - PullRequest
0 голосов
/ 28 декабря 2011

Мне нужно передать функцию в другую функцию и вызвать ее там. Я использую следующий код:

namespace DelegateTest
{
    class Program
    {
        public class MySampleClass
        {
            public void click(string param)
            {
                System.Console.WriteLine(param + " click!");
            }

            public void flick(string param)
            {
                System.Console.WriteLine(param + " flick!");
            }
        }

        public static delegate void EventToWait(string param);

        public static void waitFor(EventToWait myEvent, string param)
        {
            // here is a **very** complex loop, which i would like wipe from main() function
            myEvent(param);
        }

        public static void Main(string[] args)
        {
            MySampleClass sc = new MySampleClass();
            EventToWait ev1 = sc.click;
            EventToWait ev2 = sc.flick;

            waitFor(ev1, "Button_1");
            waitFor(ev2, "Button_2");

            System.Console.ReadKey();
        }
    }
}

Но мой компилятор говорит, что делегат не может быть статичным. Как я мог справиться с этой проблемой?

Ответы [ 2 ]

5 голосов
/ 28 декабря 2011

Ну, просто удалите ключевое слово static:

public delegate void EventToWait(string param);
0 голосов
/ 28 декабря 2011

В качестве альтернативы вы можете объявить:

public static void waitFor(Action<string> myEvent, string param)

и в вашем основном вызове:

public static void Main(string[] args)
        {
            MySampleClass sc = new MySampleClass();
            EventToWait ev1 = sc.click;
            EventToWait ev2 = sc.flick;

            waitFor((k)=>sc.click(k), "Button_1");
            waitFor((k)=>sc.flick(k), "Button_2");

            System.Console.ReadKey();
        }

это позволит избежать необходимости объявления делегата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...