C#: действительно ли возможно использовать выражения или функции как ключи в словаре?

Предположите, что у Вас есть продукт под названием 'Зебра', которая может быть расширена плагинами. Это находит плагины путем поиска DLLs в некотором каталоге. Это загружает все те DLLs и использует отражение для нахождения любых классов, которые реализуют IZebraPlugin, и затем называет методы того интерфейса для передачи с плагинами.

Это делает его абсолютно независимым от любого определенного сменного класса - это не заботится, каковы классы. Это только заботится, что они выполняют интерфейсную спецификацию.

Интерфейсы являются способом определить точки расширяемости как это. Код, который говорит с интерфейсом, более слабо связывается - на самом деле он не связан вообще ни с каким другим определенным кодом. Это может взаимодействовать с плагинами несколько записанных годы спустя людьми, которые никогда не встречали исходного разработчика.

Вы могли вместо этого использовать базовый класс с виртуальными функциями - все плагины будут получены из базового класса. Но это намного больше ограничивает, потому что класс может только иметь один базовый класс, тогда как это может реализовать любое количество интерфейсов.

7
задан Community 23 May 2017 в 11:57
поделиться

2 ответа

You can use any type of object, as long as it is an instance. That even being a delegate, but I do not recommend using delegates as keys because they are not designed for that. I'm not sure that independently created delegates produce the same hash code, even less if they can be compared (equatable).

3
ответ дан 7 December 2019 в 16:45
поделиться

Это может быть растяжкой, но с использованием среды выполнения динамического языка ( IronPython и т. Д.), Вы определенно можете запускать произвольные фрагменты кода из словаря.

Затем вы можете запускать код на лету по мере необходимости, кэшировать результат в первый раз и использовать кешированный результат для всех будущих вызовов.

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

0
ответ дан 7 December 2019 в 16:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: