• 400-650-7353

    精品课程

    您所在的位置:首页 > IT干货资料 > unity > 【Unity基础知识】委托和事件

    【Unity基础知识】委托和事件

    • 来源:Unity干货资料
    • 2021-03-18 19:40:06
    • 阅读()
    • 分享
    • 手机端入口

    看了之前的文章,大家都知道Unity使用脚本最主流的语言就是C#语言。作为程序员小哥哥,平时经常会听到C#语言中的委托和事件吧。我们今天重点来学习一下委托。

    委托和事件各种项目的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里憋得慌,浑身不自在。本文中,将通过两个案例由浅入深地讲述什么是委托、为什么要使用委托以及事件的由来。

    委托的关键字是delegate。也就是和int、string一样,用delegate关键字来声明一个委托类型。而委托的声明方式和类却完全不同,这是怎么一回事?实际上,委托在编译的时候确实会编译成类。因为所定义的委托类型在C#中属于引用类型,也是一个类,所以在任何可以声明类的地方都可以声明委托类型。更多的内容将在下面讲述,现在,请看看这个案例的完整代码:

    using System;

    using System.Collections.Generic;

    using System.Text;

    namespace Delegate {

    //定义委托,它定义了可以代表的方法的类型

    public delegate void GreetingDelegate(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) {

    MakeGreeting(name);

    }

    static void Main(string[] args) {

    GreetPeople("Jimmy Zhang", EnglishGreeting);

    GreetPeople("张子阳", ChineseGreeting);

    Console.ReadKey();

    }

    }

    }

    输出如下:

    Morning, Jimmy Zhang

    早上好, 张子阳

    下面我们介绍委托的常用的四种形式:

    //delegate 匿名委托

    Niming nm = delegate (string str)

    {

    Console.WriteLine("我是匿名委托" + str);

    return str.ToUpper();

    };

    Console.WriteLine(nm("nihao"));

    nm = delegate (string str)

    {

    Console.WriteLine("我是匿名委托" + str);

    return str.ToLower();

    };

    Console.WriteLine(nm("NiHAO"));

    //lambda 表达式

    //格式:(参数) =>{要执行的方法体;};

    Test test = (int a) => { a *= 10; Console.WriteLine(a); };

    test(2);

    GreetingDelegate gd = (string name) =>

    {

    Person.EnglishSpeek(name);

    Person.ChineseSpeek(name);

    Person.EnglishSpeek(name);

    };

    gd("小丽");

    //Func 委托 最后一个为返回值类型out

    Func s = delegate (string str1, string str2)

    {

    return str1 + str2;

    };

    Console.WriteLine(s("a", "b"));

    //Action委托 不需要返回值

    Action str = delegate (string str1, string str2)

    {

    Console.WriteLine(str1 + str2);

    Person.EnglishSpeek(str1);

    };

    str("你好", "乔安");

    最后,我们对委托做一个总结:

    委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。

    课程好礼申请领取
    您的姓名
    您的电话
    意向课程
     

    中公优就业

    官方QQ

    扫描上方二维码或点击一键加群,免费领取价值599元网课,加群暗号:599。 一键加群

    >>本文地址:
    注:本站稿件未经许可不得转载,转载请保留出处及源文件地址。

    推荐阅读

    优就业:ujiuye

    关注中公优就业官方微信

    • 关注微信回复关键词“大礼包”,领80G学习资料
    QQ交流群
    领取免费网课
    (加群备注“网站”)
    IT培训交流群 加入群聊 +
    软件测试 加入群聊 +
    全链路UI/UE设计 加入群聊 +
    Python+人工智能 加入群聊 +
    互联网营销 加入群聊 +
    Java开发 加入群聊 +
    PHP开发 加入群聊 +
    VR/AR游戏开发 加入群聊 +
    大前端 加入群聊 +
    大数据 加入群聊 +
    Linux云计算 加入群聊 +
    优就业官方微信
    扫码回复关键词“大礼包”
    领取80G学习资料

    测一测
    你适合学哪门IT技术?

    1 您的年龄

    2 您的学历

    3 您更想做哪个方向的工作?

    获取测试结果
     
    课程资料、活动优惠 领取通道
     
     
    韩国毛茸茸的丰满妇女,亚洲国内自拍愉拍,高清性色生活片97,亚洲日本成本人观看 网站地图