通用<t> Unity C#

时间:2019-03-18 05:17:13

标签: c# unity3d

如果我有一些经理(单人),其中有一些协程,并且我想用一种简单的方法来停止AllAllCorountines。是否可以使用通用类型来阻止所有传入的管理器?

我无法使其工作,但是是这样吗?

void StopAllCorountinesInAllManager<T>(T manager)
{
    manager.instance.StopAllCorountines();
}

StopAllCoruntinesInAllManager(manager1);
StopAllCoruntinesInAllManager(manager2);
StopAllCoruntinesInAllManager(manager3);

1 个答案:

答案 0 :(得分:3)

为您的通用方法提供类型提示:

void StopAllCoroutinesInAllManager<T>(T manager) where T : GameObject
{
    manager.StopAllCorountines();
}

通过传递实例进行调用:

StopAllCoroutinesInManager(manager1.Instance);

或者,如果您的管理员不是GameObjects,则创建一个界面,例如:

public interface IManager
{
    void StopAllCoroutines();
}

并像这样更改您的通用方法:

void StopAllCoroutinesInAllManager(IManager manager)
{
    manager.StopAllCorountines();
}

然后在您的经理类中实现该接口,并使该实现停止所有协程。但是在这种情况下,您可以直接在管理器上调用StopAllCoroutines。

这应该允许您遍历管理器列表并停止所有协程。

将管理器的实例传递给您的函数。