带有重载的C#自定义事件

时间:2009-11-08 04:17:55

标签: c# events delegates overloading

所以我有这样的自定义事件:

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

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

和此:

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

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

如果我要使“addStatus”过载,那么在不创建第二个委托/事件的情况下,我需要做些什么来传递过载参数?

2 个答案:

答案 0 :(得分:3)

让你的status委托这样通用:

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);
}

然后,您可以创建使用相同委托的强类型事件。

修改:以下是一个完整示例,说明了这一点:

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);
    }
}

答案 1 :(得分:0)

    void addStatus(string status, int something)
or
    void addStatus(int status)
or
    void addStatus()
should all work.
相关问题