Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从订阅事件或此事件触发发送方的事件?_C#_Events - Fatal编程技术网

C# 从订阅事件或此事件触发发送方的事件?

C# 从订阅事件或此事件触发发送方的事件?,c#,events,C#,Events,假设我有一个类(窗体/窗口),它有一个按钮。在我的类中,我订阅一个方法的按钮,并在其中抛出我自己的事件: public delegate void MyEventHandler(object source, MyEventArgs e); public event MyEventHandler MyEvent; protected virtual void OnMyEvent(MyEventArgs e) { if (this.MyEvent != null) this.MyEven

假设我有一个类(窗体/窗口),它有一个按钮。在我的类中,我订阅一个方法的按钮,并在其中抛出我自己的事件:

public delegate void MyEventHandler(object source, MyEventArgs e);
public event MyEventHandler MyEvent;
protected virtual void OnMyEvent(MyEventArgs e) 
{ 
    if (this.MyEvent != null) this.MyEvent(this, e); 
}

private void Button_Click(object sender, EventArgs e)
{
    this.OnMyEvent(???, ???);
}
触发我的事件的正确方式是什么。我是否应该将
与我自己的
事件参数
一起使用

this.OnMyEvent(this, new EventArgs());
或者我应该将发件人和事件参数发送到我自己的事件订阅中

this.OnMyEvent(sender, e);
正确的方法是什么。我们应该坚持一种方法吗?微软是如何做到的?有准则吗


谢谢。

想想谁将订阅您的活动。他们需要知道它是否来自按钮吗?或者他们只需要知道它被解雇了


就个人而言,我希望侦听器只知道事件已触发,发送者是我的类,这使我可以自由更改谁可以首先触发事件,例如按钮单击、计时器等。

取决于您的eventhandler需要什么。它需要按钮中的eventargs吗?它是否需要新的事件参数?或者它根本不需要eventargs,您可以将它们从签名中删除?请参阅-@nearyprogrammer,以便MS使用
作为发送方。让它根据订阅者的情况而定是否真的那么好?我更喜欢这方面的规则,并坚持下去。由于
发送方
首先总是
对象
,不同的情况会导致混淆,不是吗?对不起,我不是指特定的订户,而是指任何订户。我将保持一致,并始终将发送方设置为同一个对象,在这种情况下,它将是您定义MyEventHandler委托的类。这也是我所相信的。我的事件在
中定义,并且是我引发事件,即使按钮事件触发我这样做。我与其他程序员交换了意见,结果产生了许多不同的意见。