您的位置:首页 > 编程语言 > C#

C# 之委托与事件

2016-08-24 21:39 357 查看
这几天因为要弄这个任务系统,接触C#的委托与事件,刚开始看的时候头真的是很大,找了很多说明的,都是越看越是糊涂,最后看到一篇文章才渐渐有点灵感。感谢

http://www.cnblogs.com/David-Huang/p/5150671.html 此博客博主。

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

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 存函数的地址,调用是按次数来的。

这里输出的结果是:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: