Unity 3D委托entrust

Unity 3D委托的多种用法


本文提供全流程,中文翻译。

Chinar 坚持将简单的生活方式,带给世人!

(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例)



Chinar —— 心分享、心创新!

助力快速理解委托的作用、用法

为新手节省宝贵的时间,避免采坑!


Chinar 教程效果:



全文高清图片,点击即可放大观看 (很多人竟然不知道)


1

Entrust —— Delegate委托


Delegate —— 委托(像类一样需要声明,且返回类型要和对应的方法一致)

举个栗子黑白88

class Program
    {
        private delegate string ChinarA(); //定义是一个委托类型:返回值为 string

        private delegate void ChinarB();


        /// <summary>
        /// 测试方法B
        /// </summary>
        static void MethodB(ChinarB b)
        {
            b(); //委托可以直接传递方法来
        }


        static void Method1()
        {
            Console.WriteLine("方法1");
        }


        static void Method2()
        {
            Console.WriteLine("方法2");
        }


        static void Main(string[] args)
        {
            int     x  = 40;
            ChinarA a  = new ChinarA(x.ToString); //实例化一个 委托对象:a。 并且 a 指向了ToString方法
            ChinarA a1 = x.ToString;              //实例化一个 委托对象:a1。 并且 a1 指向了ToString方法

            string s  = a();         //通过调用委托,即可完成调用函数
            string s1 = a1.Invoke(); //同样完成调用
            Console.WriteLine(s);
            Console.WriteLine(s1);


            /*
             * 委托类型可以当做一个参数来用
             */

            ChinarB b = Method1;
            MethodB(b);
            b = Method2;
            MethodB(b);

            Console.ReadLine();
        }

输出:

40
40
方法1
方法2

2

Action —— Action委托


Action —— 委托(具备传入参数,但不具备返回值)

Action < T > —— 委托(尖括号,最多支持16个类型的传入)

对象的声明,该委托对象 对应 相应参数类型的函数
举个栗子黑白88
这里写图片描述

    /// <summary>
    /// 测试Action类
    /// </summary>
    class Program
    {
        /// <summary>
        /// 程序主入口
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            Action a = MethodA; //Action 是系统 为了方便,自定义的一个委托类型,可以指向一个没有参数、没有返回值的函数

            Action<int> b = MethodB; //定义了一个委托对象b,可指向一个 拥有int类型形参的函数,照样没有返回值

            Action<string> c = MethodC; //定义了一个委托对象c,可指向一个 拥有string类型形参的函数,照样没有返回值

            Action<int, string, float> d = MethodD; //定义了一个委托对象c,可指向一个 拥有3个类型形参的函数,照样没有返回值


            /*
             * Action<T> 对象的声明,尖括号中最多支持传入16个类型。  该委托对象 对应 相应参数类型的函数
             */

            a();
            b(666);
            c("Chinar");
            d.Invoke(1, "3", 1);
            Console.ReadLine();
        }


        /// <summary>
        /// 有3个形参的方法
        /// </summary>
        /// <param name="arg1">整形</param>
        /// <param name="arg2">字符串</param>
        /// <param name="arg3">浮点</param>
        private static void MethodD(int arg1, string arg2, float arg3)
        {
            Console.WriteLine("方法D:" + arg1 + arg2 + arg3);
        }


        private static void MethodC(string obj)
        {
            Console.WriteLine("方法C:" + obj);
        }


        static void MethodB(int b)
        {
            Console.WriteLine("方法B:" + b);
        }


        static void MethodA()
        {
            Console.WriteLine("方法A");
        }
    }

输出:

方法A
方法B:666
方法C:Chinar
方法D131

支持

May Be —— 搞开发,总有一天要做的事!


拥有自己的服务器,无需再找攻略!

Chinar 提供一站式教程,闭眼式创建!

为新手节省宝贵时间,避免采坑!


先点击领取 —— 阿里全产品优惠券 (享受最低优惠)


1 —— 云服务器超全购买流程 (新手必备!)

2 —— 阿里ECS云服务器自定义配置 - 购买教程(新手必备!)

3—— Windows 服务器配置、运行、建站一条龙 !

4 —— Linux 服务器配置、运行、建站一条龙 !





Chinar


END

本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究

对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com

对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址

原文地址:https://www.cnblogs.com/chinarbolg/p/9601436.html