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) 收藏 举报
浙公网安备 33010602011771号