定义
匿名函数是没有显式名称的函数。在C#中,这通常通过使用delegate
关键字或lambda
表达式来实现。
语法规则
-
使用
delegate
定义匿名函数:delegate(parameters) { function_body }
-
使用
lambda
定义匿名函数:(parameters) => expression_or_statement_block
用途
- 简化代码:用于短小的、一次性使用的函数。
- 局部作用:可以访问定义它们的方法中的局部变量。
- 回调和事件处理:作为参数传递给其他方法。
在游戏开发中的用途
- 用于简短的事件处理逻辑。
- 在协程(Coroutines)或动画序列中进行逻辑处理。
- 使用LINQ查询游戏数据。
优点
- 简洁:无需命名,可内联定义。
- 功能强大:可以捕获和使用外部作用域的局部变量。
缺点
- 可读性:对于复杂逻辑,匿名函数可能会降低代码的可读性。
- 调试:因为没有函数名,调试可能会更加困难。
示例代码
-
使用
delegate
List<int> numbers = new List<int> { 1, 2, 3 }; numbers.ForEach(delegate(int number) { Console.WriteLine(number); });
-
使用
lambda
List<int> numbers = new List<int> { 1, 2, 3 }; numbers.ForEach(n => Console.WriteLine(n));
-
使用在游戏逻辑中(假设有一个
Player
类)Player player = new Player(); player.OnDeath += () => { // 重置游戏 };
如何声明
直接在需要的地方进行声明,如作为函数参数或赋值给委托类型的变量。
Func<int, int> square = x => x * x;
练习题目
- 基础:使用匿名函数实现一个列表的自定义排序。
- 中等:使用匿名函数监听一个游戏角色的
OnDeath
和OnLevelUp
事件,并实现相应逻辑。 - 高难度:实现一个简单的任务调度系统,允许使用匿名函数作为任务。