事件是基于委托的,不一定要那个才是事件
不过总要有人定一个规范(object sender , EventArgs e)前者是触发事件的对象,后都是事件相关的数据对象。
正常的事件编写模式是
public delegate void EventHandler();
public class Button 
{
public event EventHandler Click;
protected virtual void InClick()
{
    if(Click != null)
                           Click();
}
}
事件是内部触发的,如果由一个公共方法直接引起没多大意思
定义一个受保护的虚拟方法的原因,当派生在触发事件前要做别的事件的情况,就可以重写得到新功能。