2010-09-21 25 views
9

bool NetworkAvailable = true bölümünü eklemeye çalışana kadar aşağıdaki kodun düzgün çalıştığını biliyorum. Şimdi aşağıda 4. satırda bir Method name expected derleme zaman istisnası olsun.Delegenin isteğe bağlı bir parametresi olabilir mi?

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) 
{ 
    ... 
} 

Ben, kuşkusuz, yeniye Delegates ve Optional Parameters yüzden herhangi bir fikir için minnettar olacaktır. Teşekkürler.

cevap

5

Temsilci, bir yöntem tanımına işaret eder.
Bir yönteme işaret eden bir temsilci başlattığınızda, herhangi bir parametre belirtemezsiniz.

Bunun yerine, bu gibi Invoke yönteme parametre değerlerini geçmesi gerekiyor:

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

Teşekkür çağırabilir, görünüşe = doğru); ', doğru mu? Öyleyse kabul ediyorum çünkü diğer yolu derlemeyecek ama ... –

+1

Evet; Temsilci _definition_, temsilci tarafından alınan parametreleri tanımlamalıdır. Bir temsilci türü, temsilci içindeki yöntem (ler) in eşleşmesi gereken bir işlev imzasını tanımlar. – SLaks

+0

Ben de öyle düşündüm. "Delegeler" in, onların düşündükleri kadar kötü olmadığına göre doğru yolda olduğuma sevindim. –

23

bazı çok sınırlı ölçüde. Kullanımı C# 4: -> `temsilci boşluk SetUpdateHUDConnectedMode (bool NetworkAvailable benim temsilci parametre böyle yanı beyan etmesi gerekir gibi

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 

Ve sonra

t1(1); 
    t1(1, 2); 
    t2(2); 
    t2(2, 3); 
+2

C# 2 de çalışın – Softlion

+0

Bu bir C# 5 özelliği olup olmadığından emin değilsiniz, ancak örneğinizde, örneğin statik boşluk T2'yi (int a, int b = 1) {} örneğin bildirebilir ve yine de hata yapamazsınız t3'e kadar. Temsilci/imza eşleşmeleri, varsayılan değer yerine isteğe bağlı parametreleri eşleme temelinde çalışacak gibi görünüyor. –

İlgili konular