public event EventHandler MyButtonClick = delegate { };
上記の構成により、サブスクライバーが存在するかどうかをチェックしないようにすることができます。
public virtual void OnMyButtonClick(EventHandler e)
{
this.MyButtonClick(this, e);
}
それ以外の
public virtual void OnMyButtonClick(EventHandler e)
{
if (MyButtonClick!=null)
this.MyButtonClick(this, e);
}
しかし、それは本当に良い考えですか?サブスクライバが存在するかどうかを確認しないという利点はこれだけですか?
更新:これが例です
namespace ConsoleApplication2
{
public class TestClass
{
public event EventHandler MyButtonClick;
//= delegate { };
public void OnButtonClick(EventArgs e)
{
MyButtonClick(this, e);
}
}
class Program
{
static void Main(string[] args)
{
var testClass = new TestClass();
//it throws an exception
testClass.OnButtonClick(new EventArgs());
// if you add an handler it will call it
testClass.MyButtonClick += myCustomHandler;
testClass.OnButtonClick(new EventArgs()); // myCustomHandler has been invoiked
}
private static void myCustomHandler(object sender, EventArgs e)
{
Console.WriteLine("myCustomHandler has been invoiked");
}
}
}