亲宝软件园·资讯

展开

C#委托和事件的简单实例

Keane1998 人气:0
# 委托 C#里这个委托我的理解是可以看成是一个**方法模板的类型**。(不过并没有找到相关的理解 比如有几个返回值,参数列表类型相同的方法,就能用同个模板类型来表示,然后实例化一个委托类型就绑定上一个或多个方法,然后就可以一次调用这多个方法,相当于把方法对象化?。 ```c# using System; namespace test { class Test{ static void fun1(int a) { Console.WriteLine("fun one {0}",a); } static void fun2(int a) { Console.WriteLine("fun two {0}", a); } static void fun3(int a) { Console.WriteLine("fun three {0}", a); } //定义一个委托类型 public delegate void fun(int b); static void Main(string[] args) { fun a, b, c, d,e; //绑定方法 a = fun1; b = fun2; c = fun3; d = fun1; d += fun2; d += fun3; e = new fun(fun1); //调用方法 a(1); b(2); c(3); d(4); d -= fun2; d(4); e(2); Console.ReadKey(); } } } ``` # 事件 事件需要用到委托,或者说是一种特殊的委托。 事件比起委托其实就多了一个关键字event,起到一个对委托的保护作用,有了event,外部就无法直接去调用发布者内部的委托,因为这是不合理的,发布者何时发布这个委托函数应该是发布者自己决定的。 ```c# using System; namespace test { /***********发布器类***********/ public class EventTest { public delegate void NumManipulationHandler(); //声明委托 public NumManipulationHandler ChangeNum; //声明事件 public void OpenDoor() { ChangeNum(); //事件触发 } } /***********订阅器类***********/ public class subscribEvent { public void printf() { Console.WriteLine("The door is opened."); } } /***********触发***********/ public class MainClass { public static void Main() { EventTest e = new EventTest(); /* 实例化事件触发对象 */ subscribEvent v = new subscribEvent(); /* 实例化订阅事件对象 */ /* 订阅器的printf()在事件触发对象中注册到委托事件中 */ e.ChangeNum += new EventTest.NumManipulationHandler(v.printf); e.OpenDoor(); /* 触发了事件 */ e.ChangeNum(); Console.ReadKey(); } } } ```

加载全部内容

相关教程
猜你喜欢
用户评论