C#学习之——委托(Delegate)
1.什么是委托
定义:委托可以看作是方法的套壳(我是这么理解的),它可以套住所有符合它尺寸的方法并代替它去使用。
2.如何定义委托
using System;
namespace Demo01 {
// 定义了一个委托——Delegate01,这个委托可以套住所有返回类型和参数列表与它相同的方法
public delegate void Delegate01();
}
3.委托有什么用
相信很多人刚看到委托的定义时也和我有一样的疑问,委托到底有什么用?它可以代替原方法使用?那我直接使用原方法不好吗?… …
起初我也有这样的疑问,但后来我查阅资料后发现并不是这样的。在有些场景中我们的确需要使用到委托
例如:
- LOL中我们可以给技能绑定不同的按键;
- 进行回调时我们可以使用委托来进行回调,而不需要写明具体的对象所调用的具体的方法;
- 结合事件一起进行使用等等
4.委托的使用场景
我们使用委托来模拟LOL中为英雄技能指定按键:
using System;
/*
对 Program02 的又一种做法
*/
namespace Demo01
{
// 委托
public delegate void Key();
// 技能池
public class Skill
{
// 具体的方法
public static void QSkill()
{
Console.WriteLine("亚索释放了 Q 技能");
}
public static void WSkill()
{
Console.WriteLine("亚索释放了 W 技能");
}
public static void ESkill()
{
Console.WriteLine("亚索释放了 E 技能");
}
public static void RSkill()
{
Console.WriteLine("亚索释放了 R 技能");
}
}
// 每个英雄配备的按键
public class Hero
{
public Key keyQ;
}
// 使用按键
class Use
{
public static void Main(String[] args)
{
Skill skill = new Skill();
Hero yasuo = new Hero();
yasuo.keyQ = Skill.QSkill;
// yasuo.keyQ();
yasuo.keyQ += Skill.WSkill;
yasuo.keyQ();
yasuo.keyQ -= Skill.QSkill;
yasuo.keyQ();
}
}
}
这样看其实也还是很懵,但我们可以想象如果不使用委托来指定按键,那么英雄释放并更换按键就需要这么几步:
- 在游戏逻辑类中定义相应英雄类的对象并使用”对象名.方法名”的方式来进行调用方法;
- 若需要更改按键,就需要在逻辑类中更改方法名;
- 若使用其他英雄,则需要在逻辑类中添加新的对象名使用新的方法名。
若使用了委托:
- 在英雄类中指定逻辑类中的委托具体代表着什么样的方法;
- 如需要更改按键,只需要在逻辑类中更改委托所指定的方法;
- 若使用其他英雄,也不需要在逻辑类中添加新的对象名使用新的方法名。
OK,其实我也正在学习,写这个主要还是为了巩固自己所学的。
如果您看到了这里还没走的话我还是非常的感谢您,谢谢!