笔记 【委托•快餐篇】7分钟带你了解委托与Lambda表达式(中文转载)
视频传送门【委托•快餐篇】7分钟带你了解委托与Lambda表达式(中文转载)
聊聊「Delegate委托 」和「Event事件」
事实上,声明委托还是蛮直接的
(补充:委托要说全称的话 叫委托类型,是引用类型,可用来声明变量,)
通过 关键字【delegate】之后的声明格式同 创建一般方法 的格式类似。
写上目标方法的【返回值类型】void
用了委托后的代码。 (啊?!!!我不得不说一下,我没看懂,问题:为什么需要重复写很多次的代码,用委托之后就不需要重复写了捏?等会再会看一下。)
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerStats : MonoBehaviour { new public string name; public int kills; public int deaths; public int flagsCaptured; }
using System.Collections; using System.Collections.Generic; using UnityEngine; public class DisplayNames : MonoBehaviour { delegate int ScoreDelegate(PlayerStats stats); void OngameOver(PlayerStats[] allPlayerStats) { string playerNameMostKills = GetPlayerNameTopScore(allPlayerStats,ScoreByKillcount); string playerNameMostFlagCaptured = GetPlayerNameTopScore(allPlayerStats,ScoreByFlagCaptures); } int ScoreByKillcount(PlayerStats stats) { return stats.kills; } int ScoreByFlagCaptures(PlayerStats stats) { return stats.flagsCaptured; } // 参数列表是PlayerStats类型的数组, //方法内部, string GetPlayerNameTopScore(PlayerStats[] allPlayerStats,ScoreDelegate scoreCalculator ) { string name = ""; int bestScore = 0; foreach (PlayerStats stats in allPlayerStats) { int score = stats.kills; if (score > bestScore) { bestScore = score; name = stats.name; } } return name; } }
「Lambda表达式」
Lambda表达式的基础就是委托,
就比如刚才的委托类型ScoreDelegate,输入的参数类型是PlayerStats类型,
delegate int ScoreDelegate(PlayerStats stats);
我们可以创建 委托类型的变量 在【等号】后面直接写上【输入参数的名称】,
ScoreDelegate scoreCalculator =stats =>
(Lambda表达式在很多地方都能见到(比如说LINQ,回调用方法等))