gpt4 book ai didi

c# - Unity中有类似Runnable的东西吗?

转载 作者:太空宇宙 更新时间:2023-11-03 19:52:26 25 4
gpt4 key购买 nike

我是 Unity 的新手,对它不是很了解。但是,我过去曾使用过 Java 和 Objective-C;两种面向对象的基于 C 的编程语言,非常类似于 Unity 使用的 C#。

Objective-C 有 blocks这些变量允许您在其中存储函数并稍后调用它们。在实践中使用时,您可以将 block 用作函数参数和类属性,从而节省了程序员的“if”语句,而只是简单地调用 block 。

该语法的一个示例是(取自链接的教程站点):

// Declare a block variable
double (^distanceFromRateAndTime)(double rate, double time);

// Create and assign the block
distanceFromRateAndTime = ^double(double rate, double time) {
return rate * time;
};

// Call the block
double dx = distanceFromRateAndTime(35, 1.5);

NSLog(@"A car driving 35 mph will travel %.2f miles in 1.5 hours.", dx);

Java 有 Runnable类,这是其多线程结构的基础。 (Thread 继承自 Runnable。)我从 previous question 中了解了该类。我问。有两种制作 Runnable 的方法:Java 8 使用 lambdas 的方法...

Runnable r = () -> { System.out.println("This is just an example!"); }

Java 8 使用 lambda 作为函数参数...

void someFunction(Runnable r) {
r.run();
}

// In a method, not sure about the semicolons
someFunction( () -> { System.out.println("This will work, too!"); });

最后,Java 8 之前...

Runnable r = Runnable(){
@Override
public void run() {
System.out.println("Yet another example");
}
}

我的问题是,我将如何在 Unity 的 C# 变体中实现这一点?

最佳答案

Action 委托(delegate)是等效的,没有多线程方面。您可以通过指定参数列表、'=>' 符号和结果表达式来使用表达式,它也可以是一个 block 。如果返回类型为非 void,则可以使用 Func。

Action a = () => Console.WriteLine("a");
Action b = x => Console.WriteLine(x);
Action c = (x, y, z) => {
Console.WriteLine(x);
Console.WriteLine(y);
Console.WriteLine(z);
}
Func<int, int, int> add = (x, y) => x + y; // last type is return-type

许多多线程库将接受 Action 和函数作为参数,包括核心 TPL,其中包括 Task.RunTask.ForEach 等方法。在操作 os 集合时,PLINQ 扩展 (Parallel Linq) 是一个很好的工具,可以将函数链接在一起。

关于c# - Unity中有类似Runnable的东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37310719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com