У меня есть простая библиотека классов (служба COM+), написанная на C# для использования 5 веб-служб: «Добавить», «Минус», «Разделить», «Умножить» и «Сравнить».
Я создал классы абстрактного продукта и абстрактной фабрики. Абстрактный продукт с именем WS code:
public abstract class WS
{
public abstract double Calculate(double a, double b);
public abstract string Compare(double a, double b);
}
Как видите, когда один из подклассов наследует WS, оба метода должны быть переопределены, что может оказаться бесполезным в некоторых подклассах. Например. Compare не нуждается в методе Calculate().
Чтобы создать экземпляр нового объекта CompareWS, клиентский класс вызовет метод CreateWS(), который возвращает тип объекта WS.
public class CompareWSFactory : WSFactory
{
public override WS CreateWS()
{
return new CompareWS();
}
}
Но если Compare() не определено в WS, метод Compare() не может быть вызван. Это потому, что клиент будет использовать объект типа WS, а не объект CompareWS.
Это только пример с двумя методами, но что, если методов больше? Глупо ли определять все методы как абстрактные в классе WS?
Мой вопрос: я хочу определить абстрактные методы, общие для всех подклассов WS, тогда как, когда фабрика создает тип объекта WS, могут быть вызваны все методы подклассов (переопределенные методы WS, а также методы в подклассах). Как мне это сделать?