#c# #delegates
#c# #делегаты
Вопрос:
Я хочу создать библиотеку, которая позволяет пользователям создавать параметры консоли с текстом (то, что пользователь увидит в консоли) и либо функцией, либо другим набором параметров, привязанных к выбору любого заданного параметра.)
Сейчас я работаю над созданием двух основных классов для обработки этой функциональности:
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’, чтобы либо отобразить другое представление, либо запустить какую-либо назначенную функцию соответственно.
Итак, причина, по которой мне нужно, чтобы передаваемые функции не имели какой-либо конкретной подписи, заключается в том, что эта система может использоваться без ограничений в различных приложениях.
Я полагаю, что одним из путей было бы сделать опцию универсальной и иметь функцию, которая передается в параметризованной зависимости от того, как пользователь расширяет класс опций? Но ограничения на это должны были бы допускать произвольное количество параметров для общего параметра. Честно говоря, я даже не уверен, что это возможно, поскольку я никогда не пробовал.
Есть идеи о том, каким может быть достойный способ реализации этого? Или если это вообще возможно?
Комментарии:
1. Если вы передаете произвольную функцию с любой подписью, как вы ожидаете, что вызывающий код сможет ее выполнить?
2. Возможно, мне следует перефразировать. Я хочу иметь возможность передавать любую функцию, но она известна во время создания опции. Например: new Option(«Текст», addProduct(«413rs», 100) ); ИЛИ new Option(«Текст», CreateOrder(некоторые аргументы отличаются от первой опции)); Также возможно, я неправильно понимаю вопрос, который вы мне задаете. Пожалуйста, дайте мне знать, если мне нужно уточнить дальше.
3. Можно было бы использовать действия со всеми параметрами, необходимыми как часть закрытия, что упростило бы вызов и передачу параметров.
4. Скотти, не мог бы ты привести пример? 🙂