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

Lie*_*nau 4 c# events delegates overloading

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

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

    void addStatus(string status)
    {
        MessageBox.Show(status);
    }
Run Code Online (Sandbox Code Playgroud)

和这个:

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

    public void doWork()
    {
        newStatus("Work Done");    
    }
Run Code Online (Sandbox Code Playgroud)

如果我要使“addStatus”成为重载,我必须做什么才能在不创建第二个委托/事件的情况下传递重载参数?

And*_*are 5

让你的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);
}
Run Code Online (Sandbox Code Playgroud)

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

编辑:这是一个完整的示例,显示了这一点:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)