栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

C#委托与事件原理及实例解析

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#委托与事件原理及实例解析

委托:个人在这里理解 委托就是 定义一个引用,一个可以记录函数指针的引用。

public delegate void GreetingDelegate(int param);

事件:就是基于委托定义的。

public event GreetingDelegate payxx;

其实这里的事件payxx 就差不多和string 一样可,只不过是存函数指针的变量。

这里上一个例子代码:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System;
public class basetest : MonoBehaviour
{

  public GameObject panel;
  private bool isclick = false;
  public delegate void GreetingDelegate(int param);
  public event GreetingDelegate payxx;
  // Use this for initialization
  void Start()
  {

  }

  // Update is called once per frame
  void Update()
  {

  }
  void onMouseOver()
  {
    if (Input.GetMouseButtonDown(0))
    { //左键点击
      Debug.LogError("你点击了NPC");
      //playRenwu();
    }

  }
  public void pay() {
    Debug.LogError("触发了委托");
  }

  void playRenwu(bool isnotclick)
  {
    Debug.LogError("开始NPC任务");
    panel.gameObject.SetActive(isnotclick);
  }


  //protected virtual void onpayxxxxx(int param)
  //{
  //  if (payxx != null)
  //  {
  //    Debug.LogError("委托的事件触发了");
  //    payxx(param);
  //  }
  //  else
  //  {
  //    Debug.LogError("委托的事件没触发");
  //  }

  //}
  public void onpayxx(int param)
  {
    if (payxx != null)
    {
      payxx(param);
    }
    else { 
    }
    
  }

  public void Myfuntion2(int param)
  {
    Debug.LogError("第二次调用=" + param);
  }
  public void MyFunction(int param)
  {
    Debug.LogError("OKOKOKOKO=" + param);
  }
  public void onclickbutton()
  {
    basetest eventTest = new basetest();
    eventTest.payxx += new GreetingDelegate(MyFunction);//安装事件
    eventTest.payxx += new GreetingDelegate(Myfuntion2);//安装事件
    eventTest.onpayxx(10);

    if (isclick == false)
    {
      Debug.LogError("你点击了按钮");
      isclick = true;
      playRenwu(true);
    }
    else
    {
      isclick = false;
      playRenwu(false);
    }
  }
}

payxx 存函数的地址,调用是按次数来的。

这里输出的结果是:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/121652.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号