2011-12-28 45 views
0

我需要将一个函数传递给另一个函数并在那里调用它。我使用下面的代码:如何将呼叫传递给某个功能?

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(); 
     } 
    } 
} 

但我的编译器说,委托不能是静态的。我该如何处理这个问题?

回答

5

好,只需去除static关键字:

public delegate void EventToWait(string param); 
+0

哦......你是对的 – Eugene 2011-12-28 17:02:09

0

或者你可以声明:

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(); 
     } 

这避免了需要申报的代表。