C#中事件是基于委托。 不使用event关键字定义委托实例对象: //定义一委托类型 public delegate void MyButtonEventHandler(string msg); //定义MyButton类,模拟按钮对象 public class MyButton { //定义一委托实例 public MyButtonEventHandler Click; private string msg; /// <summary> /// 用于触发Click事件(模拟点击按钮) /// </summary> public void OnClick() { if (Click != null) { Click("我点击了:" + msg); } } //构造函数 public MyButton(string msg) { this.msg = msg; } } MyButton mb = new MyButton("MyButton对象"); //指定点击按钮后的处理方法 mb.Click += MyButton_Click; /* * * * * * * * * * * * * * * * * * * * * * * * 注意: 作为一个按钮,本身正常的业务逻辑是:点击按钮后,执行响应处理方法 但由于mb.Click没有使用event关键字,只作为一公开普通委托实例对象 因此无需点击,就可任意执行处理方法,这显然不是我们所期望的^-^ * * * * * * * * * * * * * * * * * * * * * * * * */ mb.Click("Click为公共委托对象,可任意触发执行委托方法,而无需触发OnClick方法"); //点击按钮触发委托方法 //mb.OnClick(); //响应处理方法 private void MyButton_Click(string msg) { Response.Write(msg); } 使用event关键字: //定义一委托类型 public delegate void MyButtonEventHandler(string msg); public class MyButton { //定义一委托实例(事件) public event MyButtonEventHandler Click; private string msg; /// <summary> /// 用于触发Click事件(模拟点击按钮) /// </summary> public void OnClick() { if (Click != null) { Click("我点击了:" + msg); } } //构造函数 public MyButton(string msg) { this.msg = msg; } } MyButton mb = new MyButton("MyButton对象"); mb.Click += MyButton_Click; //以下报错 //mb.Click("Click为虽公共委托对象,但不可随意执行委托方法,因为有event关键字修饰!"); //点击按钮后才触发委托方法(保证只有MyButton对象才可触发该事件) mb.OnClick();