【问题标题】:C# Custom Events with Overloads带有重载的 C# 自定义事件
【发布时间】:2009-11-08 04:17:54
【问题描述】:

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

    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”成为一个重载,我必须做些什么来传递重载参数而不创建第二个委托/事件?

【问题讨论】:

  • 我需要更多信息。当您说“使 addStatus 过载”时,您是什么意思?您想要一个采用不同参数集的重载吗?
  • @Charlie:我相信这就是 OP 想要的。例如。 addStatus(string status)addStatus(string status, bool flag)
  • @Charlie o.k.w 说的是我的意思

标签: c# events delegates overloading


【解决方案1】:

像这样使您的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);
    }
}

【讨论】:

  • 我最初很困惑你为什么建议他使用泛型。然后我仔细阅读了OP的问题,发现“我必须制作第二个自定义事件”可以通过两种方式理解。您将其解释为“我必须做些什么来避免让第二个代表”并对这个问题给出了很好的答案。我建议您扩展您的答案,以明确表示如果您不想要两个单独的委托类型,您将使用泛型委托,但您可以轻松地使用两个委托而不使用泛型。 (所以其他人不会像我一开始那样困惑)
  • 这和我做的一样,我只是想知道是否有办法通过事件传递重载参数。
  • 如果两个事件具有相同数量的参数,您可以通过将其设为通用来共享委托。如果事件需要传递不同数量的参数,则需要使用单独的委托。
【解决方案2】:
    void addStatus(string status, int something)
or
    void addStatus(int status)
or
    void addStatus()
should all work.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 2021-02-13
    • 2015-04-18
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    相关资源
    最近更新 更多