Unity 3D委托的多种用法


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

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

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


Chinar —— 心分享、心创新!

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

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

Chinar 教程效果:



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


1

Entrust —— Delegate委托

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

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个类型的传入)

对象的声明,该委托对象 对应 相应参数类型的函数



    /// <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
方法D:131

支持

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

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

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

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

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



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



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



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



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




" role="presentation">

Chinar


END

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


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


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

Unity 3D委托entrust的更多相关文章

  1. Unity 3D Framework Designing(3)——构建View和ViewModel的生命周期

    > 对于一个View而言,本质上是一个MonoBehaviour.它本身就具备生命周期这个概念,比如,Awake,Start,Update,OnDestory等.这些是非常好的方法,可以让开发者 ...

  2. Unity 3D Framework Designing(4)——设计可复用的SubView和SubViewModel(Part 1)

    『可复用』这个词相信大家都熟悉,通过『可复用』的组件,可以大大提高软件开发效率. 值得注意的事,当我们设计一个可复用的面向对象组件时,需要保证其独立性,也就是我们熟知的『高内聚,低耦合』原则. 组件化 ...

  3. Unity 3D Framework Designing(6)——设计动态数据集合ObservableList

    什么是 『动态数据集合』 ?简而言之,就是当集合添加.删除项目或者重置时,能提供一种通知机制,告诉UI动态更新界面.有经验的程序员脑海里迸出的第一个词就是 ObservableCollection.没 ...

  4. Unity 3D网络游戏实战 pdf

    Unity 3D网络游戏实战(全) 目录: 掌握Unity3D基本元素 1.1 简单的游戏 1.1.1在场景中创建一个立方体 1.1.2编写可以使立方体运动的程序 1.1.3测试游戏1.1.4总结1. ...

  5. Circular progress bar in Unity 3D

    Circular progress bar in Unity 3D - UnityScripthttp://stackoverflow.com/questions/22662706/circular- ...

  6. Unity 3D 游戏上线之后的流水总结

    原地址:http://tieba.baidu.com/p/2817057297?pn=1 首先.unity 灯光烘焙 :Unity 3D FBX模型导入.选项Model 不导入资源球.Rig 不导入骨 ...

  7. C#程序员整理的Unity 3D笔记(十五):Unity 3D UI控件至尊–NGUI

    目前,UGUI问世不过半年(其随着Unity 4.6发布问世),而市面上商用的产品,UI控件的至尊为NGUI:影响力和广度(可搜索公司招聘Unity 3D,常常能看到对NGUI关键词). NGUI虽然 ...

  8. C#程序员整理的Unity 3D笔记(十三):Unity 3D基于组件的思想

    如果你接触过<设计模式>.软件架构的编程思想,就会知道优秀的设计准则:“组合优于继承的”. 这句话很简短,但开始学习OOP的时候,真切的是—-不太好理解(以我个人当初学习为例). OOP的 ...

  9. 【图说】Eclipse与Unity 3D协同工作

    原地址:http://blog.csdn.net/h570768995/article/details/9355313 Eclipse开发过程中总会碰到很多的难题,如何利用好工具帮助我们更快捷的开发也 ...

随机推荐

  1. [转]一次CMS GC问题排查过程(理解原理+读懂GC日志)

    这个是之前处理过的一个线上问题,处理过程断断续续,经历了两周多的时间,中间各种尝试,总结如下.这篇文章分三部分: 1.问题的场景和处理过程:2.GC的一些理论东西:3.看懂GC的日志 先说一下问题吧 ...

  2. SpringBoot鸡汤(注解集合二)

    1.@NotNull :属性值不为空 2.@Profiles @Configuration @Profile("production") public class Producti ...

  3. !important 的绝对控制样式

    <head> <style type="text/css"> div{background-color: blue !important;} </st ...

  4. 使用AndroidStudio运行eclipse开发的app项目

    由于AS和eclipse开发的APP项目格式不同,所以直接用AS运行eclipse项目是行不通的. 下面给大家讲解一下如何在AS上成功运行eclipse项目 首先有这么个eclipse项目文件夹 然后 ...

  5. 强制ubuntu登陆用户退出

    #skill -KILL -u user1 杀死并注销user1. #skill -CONT -u user1 恢复user1. 在Windows 2003默认情况下,三个以上就远程不了,必须强制登录 ...

  6. JavaScript -基础- 函数与对象(二)String

    一.判断数据类型typeof与判断对象类型instanceof 1.typeof typeof只能判断基础数据类型,无法判断引用数据类型 <script> var s="hell ...

  7. MySQL 占用cpu 100%

    目前的线上数据库,分为主从两个库,从库用来做比较耗时的数据统计分析. 今天top了一下从库服务器,发现mysqld 在很长一段时间都占用105% cpu,一开始以为是从库在处理主库的binlog. 两 ...

  8. RabbitMQ 设置队列的过期时间

    设置队列的过期时间非常简单,在声明队列时,设置x-expires参数即可.当队列的生存周期超时后,RabbitMQ server会自动将该队列删除. 代码如下: channel.QueueDeclar ...

  9. 使用GCD控制网络请求

    当,当山峰没有棱角的时候 当河水不再流 当时间停住日夜不分 当天地万物化为虚有!,,,,不好意思跑题了! 当我们在一个页面中需要进行多次网络请求才能满足页面所有的显示需要的时候,我们需要控制这些请求全 ...

  10. 软件设计基础-C/S系统

    在软件设计开发过程中,逐渐形成了一些针对特定应用领域的软件系统组织方式的惯用模式 如经典的C/S(client/server,客户/服务器)模式和B/S(browser/server,浏览器/服务器) ...