2009-11-08 8 views
2

J'ai donc un événement personnalisé comme celui-ci:C# événements personnalisés avec Surcharges

Work w = new worker() 
    w.newStatus += new worker.status(addStatus); 
    w.doWork(); 

    void addStatus(string status) 
    { 
     MessageBox.Show(status); 
    } 

et ceci:

public event status newStatus; 
    public delegate void status(string status); 

    public void doWork() 
    { 
     newStatus("Work Done");  
    } 

Si je devais faire « addStatus » une surcharge, qu'est-ce que je dois faire pour passer les paramètres de surcharge sans créer un second délégué/événement?

+0

J'ai besoin plus d'informations. Quand vous dites "make addStatus overload", que voulez-vous dire? Vous voulez une surcharge qui prend un ensemble de paramètres différent? –

+0

@Charlie: Je crois que c'est ce que veut le PO. Par exemple. 'addStatus (string status)' et 'addStatus (statut de chaîne, drapeau booléen)' –

+0

@Charlie Ce que o.k.w dit est ce que je voulais dire – Lienau

Répondre

3

Faites votre générique comme délégué status ceci:

public event Status<String> NewStatus; 
public event Status<Int32> OtherStatus; 
public delegate void Status<T>(T status); 

public void DoWork() 
{ 
    NewStatus("Work Done"); 
    OtherStatus(42); 
} 

Ensuite, vous pouvez créer des événements fortement typés qui utilisent le même délégué.

Edit: Voici un exemple complet montrant en action:

using System; 

class Example 
{ 
    static void Main() 
    { 
     Work w = new Work(); 
     w.NewStatus += addStatus; 
     w.OtherStatus += addStatus; 
     w.DoWork(); 
    }  
    static void addStatus(String status) 
    { 
     Console.WriteLine(status); 
    } 
    static void addStatus(Int32 status) 
    { 
     Console.WriteLine(status); 
    } 
} 

class Work 
{ 
    public event Status<String> NewStatus; 
    public event Status<Int32> OtherStatus; 
    public delegate void Status<T>(T status); 

    public void DoWork() 
    { 
     NewStatus("Work Done"); 
     OtherStatus(42); 
    } 
} 
+0

J'ai d'abord été confus pourquoi vous proposiez d'utiliser des génériques. Puis j'ai relu attentivement la question de l'OP et j'ai vu que «que devrais-je faire pour faire un deuxième événement personnalisé» peut être compris de deux façons. Vous l'avez interprété comme «que devrais-je faire pour * éviter de faire un deuxième délégué *» et j'ai donné une bonne réponse à cette question. Je vous suggère d'étendre votre réponse pour indiquer clairement que vous utiliseriez un délégué générique si vous ne souhaitiez pas deux types de délégués distincts, mais que vous pourriez tout aussi bien utiliser deux délégués et ne pas utiliser de génériques. (Donc, d'autres ne seront pas confus comme je l'étais au début) –

+0

C'est la même chose que je faisais, je voulais juste savoir s'il y avait un moyen de passer des paramètres de surcharge sur un événement. – Lienau

+0

Si les deux événements ont le même nombre de paramètres, vous pouvez partager le délégué en le rendant générique. Si les événements doivent passer des nombres différents de paramètres, vous devrez utiliser des délégués distincts. –

0
void addStatus(string status, int something) 
or 
    void addStatus(int status) 
or 
    void addStatus() 
should all work. 
Questions connexes