Я хочу создать библиотеку, которая позволит пользователям создавать параметры консоли с текстом (то, что пользователь увидит в консоли) и либо с функцией, либо с другим набором параметров, связанных с выбором любого данного параметра.)
То, над чем я сейчас работаю, имеет два основных класса для обработки этой функции:
OptionView (набор опций для этого конкретного сценария)
Опция (конкретная опция, которая показывает отображаемый текст и содержит функцию, которая будет запускаться при выборе, или новый OptionView, который будет отображаться (для вложенных выборов))
Пример использования будет выглядеть примерно так:
OptionView mainView = new OptionView();
mainView.AddOption("Option That Results in Another View", OptionView.CreateView(someTextFile)); // returns a new OptionView based off of a predefined set of options in a file.
// or
mainView.AddOption("Leaf Option", FunctionToRunWithUnknownArguments);
И все это можно сделать из установочных файлов, чтобы избежать необходимости вручную создавать представления при желании.
Последняя часть должна выполнить / отобразить OptionView:
mainView.Execute();
, и в этот момент параметры будут перечислены, и пользователь может ввести связанный номер, чтобы выбрать любые параметры.
Если я должен был добавить обе эти опции к mainView
, тогда позвоните mainView.Execute();
появится следующее:
1. Option That Results in Another View
2. Leaf Option
и пользователь может набрать '1' или '2', чтобы либо отображалось другое представление, либо для запуска определенной функции, соответственно.
Поэтому мне нужно, чтобы передаваемые функции не имели какой-либо конкретной подписи, чтобы эта система могла использоваться без ограничений в различных приложениях.
Полагаю, что одним из путей было бы сделать Option универсальным и иметь функцию, которая передается в параметризованной зависимости от того, расширяет ли пользователь класс Option? Но ограничения на это должны были бы разрешить произвольное количество параметров для универсального Option. Я, честно говоря, даже не уверен, что это возможно, поскольку я никогда не пробовал.
Любые идеи о том, как приличный способ реализации этого может быть? Или если это вообще возможно?