Создание экземпляра generi c типа из словаря - PullRequest
0 голосов
/ 03 августа 2020

У меня есть несколько классов, реализующих интерфейс ITerminalCommand:

public class TerminalCommandHelp : MonoBehaviour, ITerminalCommand { //... }
public class TerminalCommandExit : MonoBehaviour, ITerminalCommand { //... }

В отдельном классе я хотел бы иметь возможность искать строку в словаре и создавать новый экземпляр ITerminalCommand , но я не знаю, как бы go это сделать, поэтому ниже я написал какой-то псевдокод в надежде, что кто-то поймет, что я пытаюсь сделать.

Dictionary<string, ITerminalCommand> validInputs = new Dictionary<string, ITerminalCommand>()
    {
        {
            "help", 
            //Some reference to the TerminalCommandHelp class so I can instantiate it at my own will
        },

        {   
            "exit",
            //Some reference to the TerminalCommandExit class so I can instantiate it at my own will
        }
    };

    //Create a new object based on the key I am looking up, and supply some arguments to the constructor
     ITerminalCommand genericTerminalCommand = new validInputs["help"](arguments);

    //Run a method on the newly instantiated object
    genericTerminalCommand.Execute();

Как я могу «абстрактно» ссылаться на тип класса в словаре, чтобы я мог создать его экземпляр, а также предоставить ему некоторые аргументы?

1 Ответ

1 голос
/ 03 августа 2020

Попробуйте этот код:

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

ITerminalCommand genericTerminalCommand = (ITerminalCommand)Activator.CreateInstance(validInputs["help"]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...