Универсальный <T>Unity C # - PullRequest
       17

Универсальный <T>Unity C #

1 голос
/ 18 марта 2019

Если у меня есть менеджер (синглтон), в котором есть некоторые сопрограммы, и я хочу StopAllCorountines с простым методом. Можно ли сделать универсальный тип, чтобы остановить весь проходящий менеджер?

Я не смог заставить его работать, но это что-то вроде этого?

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

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

1 Ответ

3 голосов
/ 18 марта 2019

Дайте вашему универсальному методу подсказку типа:

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 непосредственно у менеджера.

Это должно позволить вам перебирать список менеджеров и останавливать все сопрограммы.

Передайте экземпляр менеджера вашей функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...