Bra*_*rad 2 c# events .net-2.0
如果事件没有订阅者,我如何确保在触发事件时不会抛出异常.
// Delegate declaration
public delegate void _delDisplayChange(object sender,string option);
// Event declaration
public event _delDisplayChange DisplayChange;
//throwing the event
DisplayChange(this, "DISTRIBUTION");
Run Code Online (Sandbox Code Playgroud)
Bri*_*sio 18
以下是推荐的方法:
protected void RaiseDisplayChanged(string message)
{
var handlers = DisplayChange;
if(handlers != null)
handlers(this, message);
}
Run Code Online (Sandbox Code Playgroud)
在检查之前复制事件处理程序枚举会做两件事:
此外,您没有使用标准的事件协议.你的代表应该是:
public delegate void DisplayChangeDelegate(object sender, OptionsEventArgs args);
Run Code Online (Sandbox Code Playgroud)
OptionsEventArgs派生自EventArgs的位置.更进一步,在.Net 3.5中,你永远不应该像这样定义一个委托.相反,您应该只定义您的事件:
public event EventHandler<OptionsEventArgs> DisplayChanged;
Run Code Online (Sandbox Code Playgroud)
我想通过定义这个类更进一步:
public class EventArgs<T> : EventArgs
{
public T Payload { get; private set }
public EventArgs(T payload)
{
Payload = payload;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您不需要定义OptionsEventArgs:
public event EventHandler<EventArgs<string>> DisplayChanged;
Run Code Online (Sandbox Code Playgroud)
只是想一些东西......
| 归档时间: |
|
| 查看次数: |
1093 次 |
| 最近记录: |