今天就跟大家聊聊有关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);
}
}
}
看完上述内容,你们对C#中委托与事件的原理是什么有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。