湖南网站搜索排名优化电话,网站建设捌金手指下拉二八,电子商务未来发展趋势前景,crm系统一、Delegate委托可以理解为一个方法签名。 可以将方法作为另外一个方法的参数带入其中进行运算。在C#中我们有三种方式去创建委托#xff0c;分别如下#xff1a; public delegate void Print(string str);static void delegatemethod(string str){Console.WriteLine(str);}…一、Delegate委托可以理解为一个方法签名。 可以将方法作为另外一个方法的参数带入其中进行运算。在C#中我们有三种方式去创建委托分别如下 public delegate void Print(string str);static void delegatemethod(string str){Console.WriteLine(str);}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);}; } 二、Event事件是一种封装过的委托。 它拥有以下三要素 1.事件发行者-达到某些条件时激发事件的对象 2.事件订阅者-订阅事件并对事件发生时进行处理的对象 3.定义发行者和订阅者关系一个发行者可能会有多个订阅者。 三、事件和委托的区别 1.委托允许直接通过委托去访问相应的处理函数而事件只能通过公布的回调函数去调用 2.事件只能通过“”“-”方式注册和取消订户处理函数而委托除此之外还可以使用“”直接赋值处理函数。 最后我们可以看看整个自定义事件的处理办法以及事件和委托的区别如下代码 //事件参数public class My_EventArgs : EventArgs{private string _args string.Empty;public My_EventArgs(string args){_args args;}public string Args{get { return _args; }}}//事件发行者public class SourceClass{public double Width { get; set; }public double Height { get; set; }My_EventArgs Evargs;public SourceClass(string args){Evargs new My_EventArgs(args);}//定义委托public delegate void EventHandler(object sender, My_EventArgs args);#region 使用委托方式声明public EventHandler Clicked;public void ClickedAsync(){if (Clicked ! null){Clicked(this, Evargs);}}#endregion#region 使用事件方式声明public event EventHandler Click;public void ClickAsync(){if (Click ! null){Click(this, Evargs);}}#endregion}//事件订阅者public class Del{public delegate void Print(string str);static void delegatemethod(string str){Console.WriteLine(str);}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}//事件处理方法1static void source_LeftClick(object sender, My_EventArgs args){SourceClass source sender as SourceClass;Console.WriteLine(目标宽度: source.Width 目标高度: source.Height);Console.WriteLine(目标对象参数:args.Args);}//事件处理方法2static void source_RightClick(object sender, My_EventArgs args){SourceClass source sender as SourceClass;Console.WriteLine(目标面积: source.Width *source.Height);}} 运行的效果图如下 转 https://www.cnblogs.com/chengxingliang/archive/2013/05/21/3051912.html转载于:https://www.cnblogs.com/asdyzh/p/9885666.html