2011-12-28 15 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(); 
     } 
    } 
} 

私のコンパイラは言う、その代理人は静的にすることはできません。どうすればこの問題に対処できますか?

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

この宣言の必要を避ける:

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

をし、あなたのメインの呼び出しで:

public delegate void EventToWait(string param); 

答えて

5

まあ、単にstaticキーワードを削除します代議員。

+0

oh ...あなたが正しい – Eugene

0

はまた、あなたが宣言することができます。

関連する問題