C#: Использование словаря строк, интерфейс для ссылки на разные классы - PullRequest
0 голосов
/ 03 августа 2020

Я хотел бы создать словарь, который использует строки в качестве ключей для создания экземпляров объектов. Вот начало моего словаря:

Dictionary<string, ITerminalCommand> validInputs = new Dictionary<string, ITerminalCommand>()
{
    {"help",  TerminalCommandHelp},
    {"exit",  TerminalCommandExit},
};

Эти классы команд терминала реализуют интерфейс ITerminalCommand как таковой:

public class TerminalCommandHelp : MonoBehaviour, ITerminalCommand
{
    //contents of class correctly implementing interface
}

Проблема в том, что когда я объявляю и инициализирую свой словарь, я получаю сообщение об ошибке:

«TerminalCommandHelp» - это тип, который недопустим в данном контексте.

Я думал, что интерфейсы могут можно использовать абстрактно для представления любого класса, который реализует его? В конечном итоге, когда пользователь ищет ключ, я хочу создать экземпляр этого конкретного класса. Может кто-нибудь указать на мое недоразумение? Спасибо!

1 Ответ

0 голосов
/ 03 августа 2020
//You are trying to pass their type not an instance.
Dictionary<string, ITerminalCommand> validInputs = new Dictionary<string, ITerminalCommand>()
    {
        {"help",  TerminalCommandHelp},
        {"exit",  TerminalCommandExit},
    };

//Initialize your types into objects and put those in your Dictionary.
IDictionary<string, ITerminalCommand> validInputs = new Dictionary<string, ITerminalCommand>()
    {
        {"help",  new TerminalCommandHelp()},
        {"exit",  new TerminalCommandExit()},
    };
...