Здравствуйте, vdimas, Вы писали:
V>Т.е., суть техники в том, что можно разработать некий тип и рядом с ним "словарь" операций над ним. V>Схематично: V>[cs] V>interface IMath<T> V>{ V> T Add(T a, T b); V> T Sub(T a, T b); V> T Mul(T a, T b); V> T Div(T a, T b); V>}
Дело говоришь. Не далее как вчера мне приходилось описывать аналогичное (моноид с `Identity` и `Combine()`).
V>Разве что потребуется каждый раз подавать этот словарь как аргумент — либо как обычный аргумент, либо как генерик параметр примерно так:
В стандартной библиотеке .NET конкретно для этих распространённых интерфейсов (`IComparer<T>`, `IEqualityComparer<T>`) принято передавать их как есть, а не как констрейнты дженерика. То есть просто обычный динамический полиморфизм.
V>Ну или можно представить некий сложный алгоритм как объект (структуру) и параметризировать этот объект словарём лишь однажды.
Всё так. Вместо «свободной» функции с десятком аргументов делать метод типа, замыкающего в конструкторе часть этих аргументов как фиксированные параметры экземпляра.