2015-04-17 35 views
0

我在寫一個方法需要兩個參數。第一個是班級,第二個是代表。如何使用具有返回類型和可選參數的委託?

public class MyClass { 
    public delegate object MyDelegate(object[] args = null); 
    public static void Method1(MyOtherClass c, MyClass.MyDelegate del) { 
    del.Invoke(); 
    // and other stuff 
    } 
} 

我的問題是他們怎麼可以通過以下方式使用:

  • 的委託是一個類的方法
  • 委託是內嵌代碼塊

回答

0

有與正常代表無差別:

public static void Main(string[] args) 
{ 
    MyClass.Method1(0, (MyClass.MyDelegate)((arg) => 
    { 
    return 0; 
    })); 

    MyClass.Method1(0, DoSomething); 
} 

private static object DoSomething(object[] args = null) 
{ 
    return null; 
} 

請注意,爲簡單起見,我替換了MyOtherClass。當指定另一個默認值比null(例如字符串變量的文字字符串)時,這也將起作用。該委託的調用邏輯將自動傳遞默認值:

public delegate object MyDelegate(string args = "123"); 

private static object DoSomething(string args = "124") 
{ 
    Console.WriteLine(args); // prints "123" 
    return null; 
} 

因此,可以省略默認值的聲明在你的類方法(DoSomething(string args)),正如我們在lambda表達式一樣。

相關問題