//最近在网上找了好多关于事件和委托的案例,已经试验过,可以运行
//希望能够帮助正在需要的您。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// C#事件--使用事件需要的步骤
/// 事件是C#中另一高级概念,使用方法和委托相关。
/// 奥运会参加百米的田径运动员听到枪声,比赛立即执行。
/// 其中枪声是事件,而运动运比赛就是这个事件发生后的动作
/// 不参加该项比赛的人对枪声没有反应。
/// 从程序员的角度分析,当裁判员枪声响起,发生了一个事件,
/// 裁判员通知该事件发生,参加比赛的运动员仔细听枪声是否发生。
/// 运动员是该事件的订阅者,没有参赛的人不会注意,即没有订阅该事件
/// C#中使用事件需要的步骤
/// 1、创建一个委托
/// 2、将创建的委托和特定事件关联(.Net类库中的很多事件都是已经定制好的,
/// 所以他们也就有相应的一个委托,在编写关联C#事件处理程序--也就是当有事件
/// 发生时我们要执行的方法的时候,我们需要和这个委托有相同的签名);
/// 3、编写C#事件处理程序
/// 4、利用编写的C#时间处理程序生成一个委托实例
/// 5、把这个委托实例添加到产生事件对象的事件列表中去,这个过程又叫做订阅事件
/// </summary>
public class Judgment
{
//定义一个委托
public delegate void delegateRun();
//定义一个事件
public event delegateRun eventRun;
public void Begin()
{
eventRun();
}
}
public class CreateEvent : MonoBehaviour
{
//一:定义事件
//1、定义事件时,发生着要先定义委托,然后根据委托定义事件。定义事件的语法如下:
//<访问修饰符> event 委托名 事件名;
//定义事件时,一定要有一个委托类型,用这个委托类型来定义处理事件的方法类型
//下边定义一个发布者类,并在其内部定义EventRun事件
//public class Judgment
//{
// // 定义一个委托
// public delegate void delegateRun();
// //定义一个事件
// public event delegateRun eventRun;
//}
//订阅事件
//定义好事件后,与事件有关的人会订阅事件,只有订阅事件的对象才会收到发生事件的通知,
//没有订阅该事件的对象则不会收到通知。
//订阅事件的语法如下
//事件名+=new 委托名(方法名)
//加入方法名为Run,那么订阅事件EventRun的代码如下
// Use this for initialization
void Start()
{
RunSports r = new RunSports();
Judgment j = new Judgment();
//订阅事件
j.eventRun+= new Judgment.delegateRun(r.Run);
//引发事件
j.Begin();
}
// Update is called once per frame
void Update()
{
}
}
public class RunSports
{
public void Run()
{
Debug.Log("运动员开始比赛");
}
}