Может ли делегат иметь необязательный параметр? - PullRequest
11 голосов
/ 21 сентября 2010

У меня есть код ниже, который работал нормально, пока я не попытался добавить часть 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)
{
   ...
}

Я, по общему признанию, новичок в Delegates и Optional Parameters, поэтому я был бы благодарен за любое понимание. Спасибо.

Ответы [ 2 ]

25 голосов
/ 21 сентября 2010

В очень ограниченной степени. Использование 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

И тогда вы можете позвонить

    t1(1);
    t1(1, 2);
    t2(2);
    t2(2, 3);
5 голосов
/ 21 сентября 2010

Делегат указывает на определение метода.
Когда вы создаете экземпляр делегата, указывающего на метод, вы не можете указать какие-либо параметры.

Вместо этого вам необходимо передать значения параметра в Invokeметод, как это:

SetUpdateHUDConnectedMode d = UpdateHUDConnectedMode;
this.Invoke(d, e.IsAvailable);
...