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
早上好, 张子阳
[这就是GreetingDelegate(string name)委托和它的方法列表( EnglishGreeting(string name)和ChineseGreeting(string name))]
[这里Main方法中将(委托对象)列表里的EnglishGreeting和ChineseGreeting 传递给了 (可调用所引用方法的代码GreetPeople())中]
事件
事件时属于类的成员,所以要放在类的内部。
“按钮”的时候,就会有一个“Click”事件触发,而这个事件会通知“委托”去调用((委托对象) 封装的(方法列表中)的 的 某个特定方法)
下一篇: SLAM笔记(八)-再谈四元数