Мне нужен совет по наилучшему способу имитации множественного наследования для класса C#, который необходимо расширить с поддержкой динамики.Реализация функциональности DynamicObject для класса, который расширяет другой класс
У меня есть класс MainClass, который не должен зависеть от DLR - все его свойства и методы статически компилируются. В нем много перегруженных операторов. Это своего рода DSL.
ExtendedClass - это в основном MainClass с поддержкой динамики C#, например. в дополнение ко всем функциям MainClass необходимо перегрузить TryGetMember/TryInvokeMember DynamicObject, чтобы клиенты могли использовать его с расширенными свойствами, оцененными во время выполнения.
Здесь возникает проблема, связанная с тем, что DynamicObject является классом, а не интерфейсом. Поэтому ExtendedClass должен выводиться только из DynamicObject, что означает, что он должен в основном дублировать все функции MainClass.
Я полагаю, что это не необычная ситуация (два подобных класса, нужно вывести из какого-то системного класса, что делает невозможным повторное использование функций путем наследования одного из другого). Есть ли более умный способ справиться с этой ситуацией, чем простой подход: добавьте MainClass как поле участника в ExtendedClass, дублируйте все его методы/свойства и просто переместите его в содержащийся экземпляр MainClass?
Но я смотрю сейчас на IDynamicMetaObjectProvider, не решает ли эта проблема? Согласно документам, это точный случай, когда я могу добавить динамику в класс, который наследуется от другого класса. –
Это, но много работы. Если вы хотите спуститься по этой дороге, меня полностью интересует результат. – jbtule
Вглядываясь в него сейчас. Мои выражения не так сложны, надеюсь, это будет не так сложно. Но я вижу, что это займет свое время. –