溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C#中委托與事件的原理是什么

發(fā)布時(shí)間:2020-12-04 15:27:13 來源:億速云 閱讀:399 作者:Leah 欄目:開發(fā)技術(shù)

今天就跟大家聊聊有關(guān)C#中委托與事件的原理是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

委托:個(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);
    }
  }
}

看完上述內(nèi)容,你們對(duì)C#中委托與事件的原理是什么有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI