所以我有这样的自定义事件:
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”过载,那么在不创建第二个委托/事件的情况下,我需要做些什么来传递过载参数?
答案 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.