委托可以有可选参数吗?

Ref*_*din 11 .net c# delegates optional-parameters

我有下面的代码工作正常,直到我尝试添加该bool NetworkAvailable = true部分.现在我Method name expected在下面的第4行得到编译时异常.

void NetworkStatus_AvailabilityChanged(object sender, NetworkStatusChangedArgs e)
{
   var networkAvailable = e.IsAvailable;
   SetUpdateHUDConnectedMode d = new SetUpdateHUDConnectedMode(UpdateHUDConnectedMode(networkAvailable));
   this.Invoke(d);
}   

delegate void SetUpdateHUDConnectedMode(bool NetworkAvailable = true);
private void UpdateHUDConnectedMode(bool NetworkAvailable = true)
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

不可否认,我是新手Delegates,Optional Parameters所以我会感激任何见解.谢谢.

Hen*_*man 25

在某种程度上非常有限.使用C#4:

 public delegate void Test(int a, int b = 0);

 static void T1(int a, int b) { }
 static void T2(int a, int b = 0) { }
 static void T3(int a) { }


    Test t1 = T1;
    Test t2 = T2;
    Test t3 = T3;   // Error
Run Code Online (Sandbox Code Playgroud)

然后你可以打电话

    t1(1);
    t1(1, 2);
    t2(2);
    t2(2, 3);
Run Code Online (Sandbox Code Playgroud)

  • 也在C#2工作 (2认同)

SLa*_*aks 5

委托指向方法定义.
实例化指向方法的委托时,不能指定任何参数.

相反,您需要将参数值传递给Invoke方法,如下所示:

SetUpdateHUDConnectedMode d = UpdateHUDConnectedMode;
this.Invoke(d, e.IsAvailable);
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,看起来我的委托需要声明参数,像这样 - >`delegate void SetUpdateHUDConnectedMode(bool NetworkAvailable = true); `,对吗?我假设是因为它不会以其他方式编译但是...... (2认同)