如何使用具有返回类型和可选参数的委托?

时间:2015-04-17 23:37:46

标签: c# .net

我正在写一个方法接受两个参数。第一个是一个类,第二个是委托。

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

我的问题是如何在以下方面使用它们:

  • 委托是一种类方法
  • 委托是内联代码块

1 个答案:

答案 0 :(得分: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表达式中所做的那样。