public static void Main() { #region 委托 //1.普通委托 var print1 = new Print(delegatemethod); print1("这是普通方式创建的委托"); //2.匿名委托 Print print2 = delegate(string str) { Console.WriteLine(str); }; print2("这是匿名方式创建的委托"); //3.lambda委托 Print print3 = (string str) => { Console.WriteLine(str); }; print3("这是lambda方式创建的委托"); #endregion #region 事件 SourceClass source = new SourceClass("我的事件被触发"); source.Width = 5.0; source.Height = 3.0; //一、委托方式允许source.Clicked(source, new My_EventArgs("我使用委托方式调用的Args"));调用 source.Clicked = new SourceClass.EventHandler(source_RightClick); source.Clicked += new SourceClass.EventHandler(source_LeftClick); source.ClickedAsync(); source.Clicked(source, new My_EventArgs("我使用委托方式调用的Args")); //二、很明显用户希望通过使用source.ClickedAsync();去调用函数,而非直接使用上行代码去调用,所以在这里需要使用Event关键字进行申明 //注1.事件方式不允许source.Clicked(source, new My_EventArgs("我使用委托方式调用的Args"));直接调用 //注2.事件不允许 source.Click = new SourceClass.EventHandler(source_LeftClick);直接赋值 source.Click += new SourceClass.EventHandler(source_LeftClick); source.ClickAsync(); //注销事件和注册事件 source.Click -= new SourceClass.EventHandler(source_LeftClick); source.Click += new SourceClass.EventHandler(source_RightClick); source.ClickAsync(); Console.ReadLine(); #endregion }