委托调用方法
// 例子
public class Delegate : MonoBehaviour
{
public delegate void ShowDelegate();
public delegate double MultiplyDelegate(double x, double y);
void Start()
{
ShowDelegate show = new ShowDelegate(Show_1);
MultiplyDelegate mul = Multiply;
// 直接调用
show();
Debug.Log(mul(2f, 3f));
// 调用invoke方法
show.Invoke();
Debug.Log(mul.Invoke(2f, 3f));
}
public void Show_1()
{
Debug.Log("Show1");
}
public double Multiply(double x, double y)
{
return x * y;
}
}
Action委托:
注意:
// 案例
// 使用Action、Func等委托时,需要添加 using System;
public class SystemAction : MonoBehaviour
{
void Start()
{
// 无参
Action action_1 = Show_1;
action_1();
// 带参
Action<int, int> action_2 = Show_2;
action_2(1, 2);
}
void Show_1()
{
Debug.Log("Show_1");
}
void Show_2(int a, int b)
{
Debug.Log("Show_2 " + (a + b));
}
}
Func委托:Func是 .NET Framework 内置的带有返回类型的泛型委托。
注意:
/**
* System.Func 可以不带参数,但是必须带一个返回值
* System.Func 若是调用的多个泛型的委托定义,最后参数的数据类型是函数的返回值类型,需要保持一致;
* 非最后一个泛型的声明,需要与实现函数的参数个数及类型保持一致
*/
public class SystemFunc : MonoBehaviour
{
void Start()
{
// 不带参数,返回值为string类型
Func<string> func_1 = Show_1;
string a = func_1();
Debug.Log(a);
// 带int类型参数,返回值为string类型
Func<int, string> func_2 = Show_2;
string b = func_2(100);
Debug.Log(b);
// 抛出异常FormatException: Input string was not in a correct format.
/*Func<string, int > func_3 = Show_3;
int c = func_3("s");
Debug.Log(c);*/
}
string Show_1()
{
return "Show_1";
}
String Show_2(int a)
{
return a.ToString();
}
int Show_3(string x)
{
return int.Parse(x);
}
}
匿名方法:没有名字的方法称之为匿名方法。
Event事件:Event事件本身就是一种委托,只是该委托只能作为类的成员,且不可在类外进行调用。
多播委托:在 C# 语言中,多播委托是指在一个委托中注册多个方法,在注册方法时可以在委托中使用加号运算符或者减号运算符来实现添加或撤销方法。
/**
* 1. 匿名事件
* 2. event事件
* (1)event事件 只允许作为类的成员变量,且仅在类的内部使用才可以,外部不得直接调用
* (2)当作为一个类的成员,event事件在外部类赋值时,只能通过 +=/-= 的方式;而对于普通的Action则可以 =/+=/-=的方式进行赋值
* (3)可通过在类中定义方法调用event事件,外部类间接地调用这个方法来调用event
* 3. 多播委托 += -=
* 委托属于引用类型,引用类型的默认值为null,直接使用会报空异常;
* 故在使用之前需要先判断委托对象(引用对象)是否为空
*/
public class MyEventClass
{
public event Action action_3;
public Action action_4;
// event事件调用
public void Send()
{
if(action_3 != null)
{
action_3();
}
}
}
public class Broadcast : MonoBehaviour
{
// event事件
event Action action_2;
void Start()
{
// Action action = Show_1; 将该语句转为匿名
Action action = delegate () // 匿名函数
{
Debug.Log("匿名函数被执行");
};
action();
// 多播委托
Action action_1 = Show_1;
action_1 += Show_2;
//action_1 -= Show_2;
//action_1 -= Show_1;
if (action != null)
{
action_1();
}
action_2 = Show_1;
action_2();
MyEventClass mEvent = new MyEventClass();
mEvent.action_3 += Show_2;
mEvent.Send();
mEvent.action_4 = Show_2;
mEvent.action_4();
}
void Show_1()
{
Debug.Log("Show_1被执行");
}
void Show_2()
{
Debug.Log("Show_2被执行");
}
}
椅”,也作“倚”。起源较早,但不是指供人坐的椅子。原为一种树木的名称,又名“山桐子”“水冬瓜”,木材可做家具。椅子最初被称为倚子,最早出现在唐朝贞元十三年(公元797年)的《济渎庙北海坛祭器碑》中,碑阴中有“绳床十,内四倚子”的记载。从现存资料看,唐代已有相当讲究的椅子了。下面,就让小鱼给大家讲述。
2025-03-06 08:52:16
C#委托1. 委托的定义和使用委托的作用:如果要把方法作为函数来进行传递的话,就要用到委托。委托是一个类型,这个类型可以赋值一个方法的引用。C#的委托 通过 delegate 关键字来声明。声明委托的方式:// 第一种方式delegate void MyDelegate_1(int x);// 第二
2025-03-06 08:32:11
在中国文化中,送礼不仅是一种礼貌,更是表达感情与祝福的重要方式。然而,有些看似普通的礼物,实际上可能隐藏着禁忌,比如“送锅”。为什么在许多地方,人们认为送锅是一种不吉利的行为呢?今天,我们就从文化、习俗和现实角度,深度解析这一送礼禁忌。禁忌的起源与文化背景“锅”谐音“过”在汉语中,“锅”与“过”同音
2025-03-06 08:31:03
在有霜期的地区,很多朋友都是先在室内进行育苗,等温度合适了再将菜苗移栽到室外。在育苗时我们要每天观察菜苗,这样当菜苗发生变化时,我们马上就会注意到。今天老李就和大家分享菜苗的叶子发生颜色变化的原因以及相应的解决办法。造成菜苗叶子发黄的原因以及解决办法1、浇水过多这是我们在育苗时造成菜苗叶子发黄的最主
2025-03-06 08:13:34
炎炎夏日,月季非常容易出现黑杆的问题,这让花友们头疼不已。月季黑杆分3种情况,一种是根系感染;二是修剪后黑杆;三是枝枯病。根 系 感 染土壤积水再加上通风不好,这种闷湿的环境很容易滋生病菌。病菌入侵根部,茎基部变黑,并且自下而上逐渐蔓延。一旦出现了这种情况就尽快齐根剪掉变黑的枝条,因为下部枝条已经发
2025-03-06 08:05:41
夏日盛开的茉莉花是道美丽的风景线,但很多花友在莳养过程中发现自己的茉莉叶片突然发黄。其实,造成这种情况的原因有多种,有时是单一的原因,有时是多种综合因素造成的。如果茉莉在生长期由顶芽开始变黄,逐渐扩展到叶片,再蔓延到全株,这主要是茉莉根系吸收不到土壤中的可溶性铁元素所致。如果植株生长正常,叶片突然变
2025-03-06 07:37:34