Unity C# 基础复习26——初识委托(P447)

委托Delegate
        C#中的Delegate对应于C中的指针,但是又有所不同C中的指针既可以指向方法,又可以指向变量,并且可以进行类型转换,
C中的指针实际上就是内存地址变量,他是可以直接操作内存的,通过内存
地址直接访问变量,直接调用方法。
        而C#中的Delegate是强类型的,也就是说在声明委托时就已经指定
了该变量只能指向具有特定参数,以及返回值的方法。
        使用delegate就可以直接建立任何名称的委托类型,当进行系统编译
时,系统就会自动生成此类型。您可以使用delegate void MyDelegate()
方式建立一个委托类,并使用ILDASM.exe观察其成员。由ILDASM.exe
中可以看到,它继承了System.MulticastDelegate类,并自动生成BeginInvoke、EndInvoke、Invoke 等三个常用方法。

        Invoke 方法是用于同步调用委托对象的对应方法,而BeginInvoke、EndInvoke是用于以异步方式调用对应方法的。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Skill
    {
        public void Skill1()
        {
            Console.WriteLine("Skill:技能1动画");
        }
        public void Skill2()
        {
            Console.WriteLine("Skill:技能2动画");
        }
        public void Skill3()
        {
            Console.WriteLine("Skill:技能3动画");
        }
        public void Skill4()
        {
            Console.WriteLine("Skill:技能4动画");
        }
        public void Skill5()
        {
            Console.WriteLine("Skill:技能5动画");
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    delegate void AutoSkillPlayer();
    class Program
    {
        static void Main(string[] args)
        {
            AutoSkillPlayer akp = new AutoSkillPlayer(Skill1);
            akp += Skill3;
            akp += Skill4;
            Skill sk = new Skill();
            akp += sk.Skill4;
            akp -= Skill1;
            akp.Invoke();
        }
        public static void Skill1()
        {
            Console.WriteLine("技能1动画");
        }
        public static void Skill2()
        {
            Console.WriteLine("技能2动画");
        }
        public static void Skill3()
        {
            Console.WriteLine("技能3动画");
        }
        public static void Skill4()
        {
            Console.WriteLine("技能4动画");
        }
        public static void Skill5()
        {
            Console.WriteLine("技能5动画");
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_46711336/article/details/125281159