У меня есть ситуация, в которой, я думаю, мне нужны функциональные возможности, предоставляемые интерфейсом и абстрактным классом.
Я создаю модели для использования в симуляции. Каждая модель содержится в классе C #, который реализует интерфейс IModel (моего дизайна, поэтому он может быть изменен). Я также создал неуправляемую библиотеку Win32 DLL на языке c ++, которая служит мостом между моими классами модели C # и средой моделирования. Классы модели вызываются через COM, поэтому требуется интерфейс.
Я только что получил новое требование, чтобы эти классы моделей могли вызываться через веб-сервис независимо от среды моделирования. Теперь эти модели довольно чувствительны, и клиент запросил, чтобы они были настроены клиентом и выполнены на сервере *. Я подумал, что это было бы возможно, если бы я сделал классы моделей наследуемыми от абстрактного класса, а затем создал метод веб-службы на сервере:
public AbstractModel executeModel(AbstractModel modelForExecution)
, который получает объект модели от клиента, выполняет его и заполняет его результатами.
НО - я не могу использовать абстрактный класс, потому что модели требуют интерфейса для реализации COM.
Как я могу согласовать эти два требования? Мне сказали, что можно иметь класс, реализующий интерфейс И иметь этот класс, производный от абстрактного класса, но я не могу найти никаких примеров этого. Если это возможно, какой синтаксис? Если это невозможно, что еще я должен сделать?
* классы модели фактически называют исполняемым файлом древнего фортрана, поэтому конфигурация классов классов не дает слишком много информации о том, как работает модель.