欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Unity事件和委托

程序员文章站 2022-07-13 22:05:09
...

委托


	委托属于一个定义,是和类、接口类似的,通常放在类的外部,使用它时是当做类来看待而不是一个方法。相当于对一组方法的列表的引用
	用处:**委托可以将一组(方法引用)封装在(委托对象)内。然后将该(委托对象)传递给 可调用所引用方法的代码**,
	而不必在编译时知道将调用哪个方法。与C或C++中的函数指针不同,
	委托是面向对象,而且是类型安全的。
	委托定义在类里面还是类外面视情况而定,一般定义在与类定义平级部分,

且用public修饰,便于外部调用。
若定义在类的内部,则必须通过调用该类的成员才能取得其委托的引用,

using System;
using System.Collections.Generic;
using System.Text;

namespace Delegate {

//定义委托,它定义了可以代表的方法的类型
public delegate void GreetingDelegate(string name);
//GreetingDelegate(string name)相当于对一组方法的列表( //EnglishGreeting(string name)和ChineseGreeting(string name))的引用

class Program {

   private static void EnglishGreeting(string name) {
       Console.WriteLine("Morning, " + name);
   }

   private static void ChineseGreeting(string name) {
       Console.WriteLine("早上好, " + name);
   }

   //注意此方法,它接受一个GreetingDelegate类型的方法作为参数
   private static void GreetPeople(string name, GreetingDelegate MakeGreeting) {
   //GreetingDelegate MakeGreeting这里利用GreetingDelegatele"方法"新建一个//MakeGreeting()方法,当作GreetPeople的一个参数。而//MakeGreeting.EnglishGreeting(string name)或者//MakeGreeting.ChineseGreeting(string name)
       MakeGreeting(name);
    }

   static void Main(string[] args) {
       GreetPeople("Jimmy Zhang", EnglishGreeting);
       GreetPeople("张子阳", ChineseGreeting);
       Console.ReadKey();
   }
}

}

输出如下:
Morning, Jimmy Zhang
早上好, 张子阳

Unity事件和委托[这就是GreetingDelegate(string name)委托和它的方法列表( EnglishGreeting(string name)和ChineseGreeting(string name))]

Unity事件和委托
[这里Main方法中将(委托对象)列表里的EnglishGreeting和ChineseGreeting 传递给了 (可调用所引用方法的代码GreetPeople())中]


事件


	事件时属于类的成员,所以要放在类的内部。
	“按钮”的时候,就会有一个“Click”事件触发,而这个事件会通知“委托”去调用((委托对象)  封装的(方法列表中)的 的 某个特定方法)

Unity事件和委托