C#委托與事件原理及實(shí)例解析
委托:個(gè)人在這里理解 委托就是 定義一個(gè)引用,一個(gè)可以記錄函數(shù)指針的引用。
public delegate void GreetingDelegate(int param);
事件:就是基于委托定義的。
public event GreetingDelegate payxx;
其實(shí)這里的事件payxx 就差不多和string 一樣可,只不過是存函數(shù)指針的變量。
這里上一個(gè)例子代碼:
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))
{ //左鍵點(diǎn)擊
Debug.LogError("你點(diǎn)擊了NPC");
//playRenwu();
}
}
public void pay() {
Debug.LogError("觸發(fā)了委托");
}
void playRenwu(bool isnotclick)
{
Debug.LogError("開始NPC任務(wù)");
panel.gameObject.SetActive(isnotclick);
}
//protected virtual void Onpayxxxxx(int param)
//{
// if (payxx != null)
// {
// Debug.LogError("委托的事件觸發(fā)了");
// payxx(param);
// }
// else
// {
// Debug.LogError("委托的事件沒觸發(fā)");
// }
//}
public void Onpayxx(int param)
{
if (payxx != null)
{
payxx(param);
}
else {
}
}
public void Myfuntion2(int param)
{
Debug.LogError("第二次調(diào)用=" + 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("你點(diǎn)擊了按鈕");
isclick = true;
playRenwu(true);
}
else
{
isclick = false;
playRenwu(false);
}
}
}
payxx 存函數(shù)的地址,調(diào)用是按次數(shù)來的。
這里輸出的結(jié)果是:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#利用微軟自帶庫進(jìn)行中文繁體和簡體之間轉(zhuǎn)換的方法
這篇文章主要介紹了C#利用微軟自帶庫進(jìn)行中文繁體和簡體之間轉(zhuǎn)換的方法,涉及C#使用Microsoft.VisualBasic類庫操作中文繁簡字體轉(zhuǎn)換的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
C#實(shí)現(xiàn)的基于二進(jìn)制讀寫文件操作示例
這篇文章主要介紹了C#實(shí)現(xiàn)的基于二進(jìn)制讀寫文件操作,結(jié)合具體實(shí)例形式分析了C#以二進(jìn)制文件流形式針對文件進(jìn)行讀寫操作的相關(guān)技巧,需要的朋友可以參考下2017-07-07
登錄驗(yàn)證全局控制的幾種方式總結(jié)(session)
在登陸驗(yàn)證或者其他需要用到session全局變量的時(shí)候,歸結(jié)起來,主要有以下三種較方便的實(shí)現(xiàn)方式。(其中個(gè)人較喜歡使用第一種實(shí)現(xiàn)方法)2014-01-01

