seo网站排名优化工具,wordpress店铺,西安英文网站制作,电子商务的发展现状和前景趋势一、委托(Delegate) 1、定义 delegate是C#中的一种类型#xff0c;它实际上是一个能够持有对某个方法的引用的类。与其它的类不同#xff0c;delegate类能够 拥有一个签名#xff08;signature#xff09;#xff0c;并且它只能持有与它的签名相匹配的方法的引用它实际上是一个能够持有对某个方法的引用的类。与其它的类不同delegate类能够 拥有一个签名signature并且它只能持有与它的签名相匹配的方法的引用。它所实现的功能与C/C中的函数指针 十分相似。它允许你传递一个类A的方法m给另一个类B的对象使得类B的对象能够调用这个方法m。但与函数指针相比 delegate有许多函数委托和事件在 .Net Framework中的应用非常广泛指针不具备的优点。首先函数指针只能指向静态 函数而delegate既可以引用静态函数又可以引用非静态成员函数。在引用非静态成员函数时delegate不但保存了对 此函数入口指针的引用而且还保存了调用此函数的类实例的引用。其次与函数指针相比delegate是面向对象、类型 安全、可靠的受控managed对象。也就是说runtime能够保证delegate指向一个有效的方法你无须担心delegate会 指向无效地址或者越界地址。 2、创建步骤 (1)、声明一个delegate对象它应当与你想要传递的方法具有相同的参数和返回值类型。 (2)、创建delegate对象并将你想要传递的函数作为参数传入。 (3)、在要实现异步调用的地方通过上一步创建的对象来调用方法。 3、代码实现 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DelegateEventApp { class DelegateUtilClass { static void Main(string[] args) { Console.WriteLine(输出结果是); DelegateUtil du new DelegateUtil(DelegateUtilClass.OutPut); // 步骤2创建DelegateUtil对象 du(Im learning delegate now !);// 步骤3调用DelegateUtil Console.ReadLine(); } public delegate void DelegateUtil(string sName); // 步骤1声明delegate对象z /// summary /// 描述这是想要传递的方法该方法与定义的委托(即DelegateUtil)具有相同的参数和返回值类型函数名是不一样的哦 /// /summary /// param namesName/param public static void OutPut(string sName) { Console.WriteLine(Hi, sName); } } } 4、输出结果 二、事件(Event) 1、事件定义 C#中的事件处理实际上是一种具有特殊签名的delegate象下面这个样子public delegate void MyEventHandler (object sender, MyEventArgs e); 其中的两个参数sender代表事件发送者e是事件参数类。MyEventArgs类用来包含与事件相关的数据所有的事件参数 类都必须从System.EventArgs类派生。当然如果你的事件不含参数那么可以直接用System.EventArgs类作为参数。 2、创建步骤 (1)、定义delegate对象类型它有两个参数第一个参数是事件发送者对象第二个参数是事件参数类对象。 (2)、定义事件参数类此类应当从System.EventArgs类派生。如果事件不带参数这一步可以省略。 (3)、定义事件处理方法它应当与delegate对象具有相同的参数和返回值类型。 (4)、用event关键字定义事件对象它同时也是一个delegate对象。 (5)、用操作符添加事件到事件队列中-操作符能够将事件从队列中删除。 (6)、在需要触发事件的地方用调用delegate的方式写事件触发方法。一般来说此方法应为protected访问限制既 不能以public方式调用但可以被子类继承。名字是OnEventName。 (7)、在适当的地方调用事件触发方法触发事件。 3、代码实现 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace DelegateEventApp 7 { 8 class EventUtilClass 9 { 10 public delegate void EventUtilEventHandler(object sender, System.EventArgs e);// 步骤1 定义delegate对象 11 12 // 步骤2定义事件参数类省略 13 14 public class EventClass 15 { 16 public void EventUtil_Function(object sender, System.EventArgs e) 17 { 18 Console.WriteLine(Hi, This is using event to print !); // 步骤3定义事件处理方法它与delegate对象具有相同的参数和返回值类型 19 } 20 } 21 22 // 步骤4用event关键字定义事件对象 23 private event EventUtilEventHandler utilEvent; 24 private EventClass eventClass; 25 26 //构造函数 27 public EventUtilClass() 28 { 29 eventClass new EventClass(); 30 this.utilEvent new EventUtilEventHandler(eventClass.EventUtil_Function); //// 步骤5用操作符将事件添加到队列中 31 } 32 33 // 步骤6以调用delegate的方式写事件触发函数 34 protected void OnUtilEvent(System.EventArgs e) 35 { 36 if (utilEvent ! null) 37 { 38 utilEvent(this, e); 39 } 40 } 41 42 public void RaiseEvent() 43 { 44 EventArgs e new EventArgs(); 45 this.OnUtilEvent(e); // 步骤7触发事件 46 } 47 48 static void Main(string[] args) 49 { 50 Console.WriteLine(输出结果是); 51 52 EventUtilClass eventUtilClass new EventUtilClass(); 53 Console.WriteLine(请输入一个字母\A\); 54 string sRead Console.ReadLine(); 55 if (sRead A) 56 { 57 eventUtilClass.RaiseEvent(); 58 } 59 else 60 { 61 Console.WriteLine(输入有错误未触发事件!); 62 } 63 Console.ReadLine(); 64 } 65 } 66 } 67 4、输出结果