C# 调用多个事件或具有多个参数的单个事件

C# 调用多个事件或具有多个参数的单个事件,c#,custom-events,C#,Custom Events,我制作了一个自定义活动,如下所示: public delegate void ResponseReceivedDelegate(string textToSpeak, string offeringText, string offeringImageNo, string animationName, string emotion); public static event ResponseReceivedDelegate ResponseReceivedEvent; if (ResponseR

我制作了一个自定义活动,如下所示:

public delegate void ResponseReceivedDelegate(string textToSpeak, string offeringText, string offeringImageNo, string animationName, string emotion);
public static event ResponseReceivedDelegate ResponseReceivedEvent;
 if (ResponseReceivedEvent != null)
    {
       ResponseReceivedEvent (textToSpeak, offeringText, offeringImageNo, animationName, emotion);
    }
我已将此事件注册到多个其他脚本中,以便知道此事件已发生

现在的问题是,有不同的参数(如上所述)。我的每个脚本都需要一个参数,特定脚本不需要rest参数。就像一个脚本使用textToSpeak,而另一个脚本使用offeringText等等。当事件发生时。我的问题是我需要写单独的事件还是这一个事件就足够了。?哪种方法正确

ResponseReceivedEventForSpeak (textToSpeak);
ResponseReceivedEventForOfferingText (offeringText);
ResponseReceivedEventForImageNo (offeringImageNo,);
//and so on...


正如Jeroen在评论中所写的那样,我建议使用从EventArgs派生的类。在此类中,您可以使用枚举指定要传递的字符串:

public class ResponseReceivedEventArgs : EventArgs
{
    public enum EventType
    {
        TextToSpeak,
        OfferingText,
        OfferingImageNo,
        AnimationName,
        Emotion
    }
    public ResponseReceivedEventArgs(EventType eventType, String eventValue)
    {
        Type = eventType;
        Value = eventValue
    }

    public EventType Type {get;}
    public String Value {get;}
}
然后,您可以对所有内容使用相同的事件,同时仍然只发送相关字符串,并保持代码标准:

public delegate void ResponseReceivedDelegate(object sender, ResponseReceivedEventArgs eventArgs);

这是一个基于观点的东西-你可以做一个包罗万象的东西,或者你可以有个人。。这是你的设计。也许吧,但我认为只有一种专业方法我想知道它的利弊。“我认为只有一种专业方法”-这也是自以为是的。如果事件同时发生,你可以创建一个大型事件。我宁愿使用从
EventArgs
public delegate void ResponseReceivedDelegate(object sender, ResponseReceivedEventArgs eventArgs);