C#中的事件 一看即明

1.本文写了两个例子来说明C#中的事件。 例子1: 事件是:电话响了。 事件发生之后:主人走过来,电视静音了。---该例子事件不带参数不带返回值 例子2: 事件是:知道了圆的半径。 事件发生之后:计算圆的周长,计算圆的面积。---该例子带参数和返回值。 2.例子1执行结果: 例子1代码: [csharp] view plain copy using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 //不带参数不带返回值 { ///事件是:电话响了。 事件发生之后:主人走过来,电视静音了。 // 1.定义一个委托 该委托接收签名为空且返回值为空的方法 public delegate void AfterTeleRinged(); // 2.定义一个事件类 public class TeleRingClass { // 3.事件类中包含:一个事件类型的成员对象,是上面定义的委托类型的 public event AfterTeleRinged teleRinged; // 4.事件类中包含:触发该事件的代码,即调用本事件类中事件的代码,即执行该事件类中的event成员对象中保存的方法 public void CallTheRing() { Console.WriteLine("有人打来电话,电话响啦。。叮铃叮铃叮铃。。"); Console.WriteLine(); teleRinged(); } } class Program { // 5.定义可以注册到事件中的方法 方法要符合事件类中事件的委托类型的规则 public static void MethodInEvent() { Console.WriteLine("电话响了,主人走过来了。"); } public static void MethodInEvent2() { Console.WriteLine("电话响了,电视机自动静音了。"); } static void Main(string[] args) { // 6.事件类初始化 TeleRingClass teleRing = new TeleRingClass(); // 7.事件类中事件成员对象接收来注册的方法 (注意这些方法在注册时只填写方法名不带签名和括号) teleRing.teleRinged += MethodInEvent; teleRing.teleRinged += MethodInEvent2; // 8. 触发事件,即调用事件类中触发事件的方法,会依次执行注册了的方法 teleRing.CallTheRing(); Console.WriteLine(); } } } 3.例子2执行结果: 例子2代码: [csharp] view plain copy using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 //带参数带返回值 { ///事件是:知道了圆的半径。 事件发生之后:自动计算圆的周长,自动计算圆的面积。 // 1.定义一个委托 public delegate double AfterGetTheRadius(double radius); // 2.定义一个事件类 public class GetTheRadiusClass { // 3.事件类中包括:一个事件类型且接收已经定义的委托类型方法的事件成员 public event AfterGetTheRadius GetRadiusEvent; // 4.事件类中包括:触发该事件类中事件的方法 public double GetTheRadius(double radius) { Console.WriteLine("得到圆的半径是: "+radius); Console.WriteLine(); return GetRadiusEvent(radius); } } class Program { // 5.定义可以注册到事件类中的方法 public static double GetLength(double radius) { var lenth=2 * (Math.PI) * radius; Console.WriteLine("自动算出其周长是: " + lenth); return lenth; } public static double GetArea(double radius) { var area=(Math.PI) * radius * radius; Console.WriteLine("自动算出其面积是: "+area); return area; } static void Main(string[] args) { // 6.实例化事件类 GetTheRadiusClass getRadius = new GetTheRadiusClass(); // 7.向事件类中注册方法 getRadius.GetRadiusEvent += GetLength; getRadius.GetRadiusEvent += GetArea; // 8.触发事件 var eventResult= getRadius.GetTheRadius( 10.00 ); //周长 62.8318 面积 314.159 Console.WriteLine(); Console.WriteLine("事件调用完毕的返回值是: " + eventResult);//输出 314.159 } } } 4.你应该明白了,步骤是这样的: 1)定义一个委托 2)定义一个事件类 3)事件类中包括:一个事件类型且接收已经定义的委托类型方法的事件成员 4)事件类中包括:触发该事件类中事件的方法 5)定义可以注册到事件类中的方法 6)实例化事件类 7)向事件类中注册方法 8)触发事件(调用事件)

posted on 2017-06-08 16:32  alex5211314  阅读(209)  评论(0)    收藏  举报

导航