[unity3d]unity中C#委托的应用

简介:

C#中有一种还是挺实用的类型,就是委托类型,这也是初学者比较难理解的类型,我们常常将委托和事件合起来讲,其实他们两是有些区别的,委托(delegate)是一种类型,而事件(Event)是一种实例(委托中的一种)。下面我就从参考网上的一个例子,讲解一下unity中C#委托的应用。

我们新建一个脚本,取名TestDelegate。这个主要的功能就是点击中文按钮输出中文名字,点击英文按钮输出英文名字。这里有两个函数分别实现了这两个功能。如果不用委托,可以用if else,switch来实现,相比新手用的是比较多的,但大牛们的代码一般比较少出现,所以这就告示我们要对我们的代码进行仔细的研究,下面就看一下代码:

using UnityEngine; using System.Collections;  public class TestDelegate : MonoBehaviour {      //定义一个委托(格式是不是很类很像),用来指向我们某个函数。(c++里面的指针函数)     //param参数是名字     private delegate void DebugString(string param);      /// <summary>     /// 输出中文名字     /// </summary>     public void DebugNameOfChina(string str)     {         Debug.Log("中文名字:" + str);     }      /// <summary>     /// 输出英文名字     /// </summary>     public void DebugNameOfEnglish(string str)     {         Debug.Log("English Name:" + str);     }      //定义一个委托的变量事件     private DebugString handlerDebugString;       void OnGUI()     {         if (GUILayout.Button("输出中文名字"))         {             //我想输出中文名字的话就给handlerDebugString  赋值成输出中文名字的这个函数DebugNameOfChina             handlerDebugString = DebugNameOfChina;             handlerDebugString("丁小未");         }         else if (GUILayout.Button("Debug English Name"))         {             //我想输出英文名字的话就给handlerDebugString  赋值成输出中文名字的这个函数DebugNameOfEnglish             handlerDebugString = DebugNameOfEnglish;             handlerDebugString("DingXiaowei");         }     } }

这里参考了一些网上的教程,@与现实冲突的教程写的比较不错,但我也加入一点自己的理解,我个人理解这个委托有点类似就是指针函数的意味,定义一个委托变量,也就类似C/C++中的函数指针,指向哪个函数就调用执行该函数的功能。

然后我们运行一下,看一下效果:



了解过C/C++的同学一类比函数指针也就比较容易理解了,其实也就那么回事,想要用哪个函数就指向这个函数,然后去调用这个函数的方法,其实委托还有+=和-=也就是多路广播机制,下面举例:

using UnityEngine; using System.Collections;  public class TestDelegate : MonoBehaviour {      //定义一个委托(格式是不是很类很像),用来指向我们某个函数。(c++里面的指针函数)     //param参数是名字     private delegate void DebugString(string param);      /// <summary>     /// 输出中文名字     /// </summary>     public void DebugNameOfChina(string str)     {         Debug.Log("中文名字:" + str);     }      /// <summary>     /// 输出英文名字     /// </summary>     public void DebugNameOfEnglish(string str)     {         Debug.Log("English Name:" + str);     }      //定义一个委托的变量事件     private DebugString handlerDebugString;       void Start()     {         //给委托对象赋值         handlerDebugString = DebugNameOfChina;         handlerDebugString("丁小未");         Debug.Log("................................");          //给委托对象再加一个事件,叫多路广播         handlerDebugString += DebugNameOfEnglish;         handlerDebugString("DingXiaowei");         Debug.Log("................................");                  //输出中文试试         handlerDebugString("丁小未");         Debug.Log("................................");          //给委托对象减去一个事件         handlerDebugString -= DebugNameOfChina;         handlerDebugString("DingXiaowei");      }  }






















相关文章
|
2天前
|
存储 数据采集 API
C# GetField 方法应用实例
C# GetField 方法应用实例
|
2天前
|
JSON 安全 API
C# GetMethod 方法应用实例
C# GetMethod 方法应用实例
|
17天前
|
开发框架 Linux C#
C#编程的跨平台应用
【4月更文挑战第21天】C#与.NET Core的结合使得跨平台应用开发变得高效便捷,提供统一编程模型和高性能。丰富的类库、活跃的社区支持及Visual Studio Code、Xamarin等工具强化了其优势。广泛应用在企业系统、云服务和游戏开发中,虽面临挑战,但随着技术进步,C#在跨平台开发领域的前景广阔。
|
21天前
|
图形学
【Unity C#_菜单Window开发系列_Inspector Component UnityEditor开发】
【Unity C#_菜单Window开发系列_Inspector Component UnityEditor开发】
|
2月前
|
开发框架 安全 .NET
C# .NET面试系列三:集合、异常、泛型、LINQ、委托、EF!
<h2>集合、异常、泛型、LINQ、委托、EF! #### 1. IList 接口与 List 的区别是什么? IList 接口和 List 类是C#中集合的两个相关但不同的概念。下面是它们的主要区别: <b>IList 接口</b> IList 接口是C#中定义的一个泛型接口,位于 System.Collections 命名空间。它派生自 ICollection 接口,定义了一个可以通过索引访问的有序集合。 ```c# IList 接口包含一系列索引化的属性和方法,允许按索引访问、插入、移除元素等。 由于是接口,它只定义了成员的契约,而不提供具体的实现。类似于 IEnumera
162 2
|
4月前
|
定位技术 C# 图形学
Unity和C#游戏编程入门:创建迷宫小球游戏示例
Unity和C#游戏编程入门:创建迷宫小球游戏示例
75 2
|
4月前
|
程序员 C#
C# 面向对象编程进阶:构造函数详解与访问修饰符应用
构造函数是一种特殊的方法,用于初始化对象。构造函数的优势在于,在创建类的对象时调用它。它可以用于为字段设置初始值
47 1
|
4月前
|
C#
C# 运算符详解:包含算术、赋值、比较、逻辑运算符及 Math 类应用
运算符用于对变量和值执行操作。在C#中,有多种运算符可用,包括算术运算符、关系运算符、逻辑运算符等。
50 1
|
4月前
|
Java 程序员 C#
C# 介绍、应用领域、入门、语法、输出和注释详解
C#(发音为“C-Sharp”)是一种由 Microsoft 创建的面向对象的编程语言,运行在 .NET Framework 上。源于 C 家族,与流行的语言如 C++ 和 Java 相近。首个版本发布于 2002 年,而最新版本,C# 12,于 2023 年 11 月发布
69 0