#c#
#c#
Вопрос:
Проект c #, над которым я работаю, содержит ссылки на конкретный тип «Продукта», который находится во внешнем классе libray. Класс «Product» не реализует никакого интерфейса.
Я хотел бы создать интерфейс «IProduct» на основе «Product» и использовать этот код интерфейса, чтобы я мог программировать для интерфейса, а не для реализации.
Поскольку я все еще хочу продолжать использовать тип «Product», какой может быть хороший шаблон, позволяющий моему коду знать, что «Product» реализует «IProduct»?
Поскольку «Product» находится во внешней библиотеке, я не могу изменить его объявление (т.е. Procut: IProduct).
У класса также нет открытого конструктора, поэтому я думаю, что расширять его не вариант.
Какой шаблон решения хорош для этого сценария? Оболочка?
Спасибо.
Комментарии:
1. Вы обсудили типы:
Product
,Produt
,Prodcut
,Procuct
Procut
и,,. Все ли они разные или должны быть одинаковыми?2. Похоже, вам нужно взглянуть на шаблон адаптера
Ответ №1:
Вы, вероятно, захотите использовать шаблон адаптера.
Итак, вы можете сделать что-то вроде приведенного ниже:
public class Product
{
// Your Product Class
}
public class MyProduct : Product, IProduct
{
}
Где MyProduct
класс реализует интерфейс, но также имеет все общедоступные и защищенные методы / свойства, доступные из Product
класса. Это позволяет вам расширить исходный класс без внесения изменений в Product
класс, который следует принципу открытия / закрытия.
Вы можете прочитать больше об этом здесь: https://exceptionnotfound.net/the-daily-design-pattern-adapter /
Комментарии:
1. Могу ли я сделать это, если продукт не предоставляет общедоступный конструктор?
2. пока класс Product не объявлен как запечатанный, вы должны иметь возможность производить от него
3. он не запечатан, но я думаю, что если у него нет открытого конструктора, я получу сообщение об ошибке «‘Product’ не содержит конструктор, который принимает 0 аргументов». В моем случае продукт не имеет другой перегрузки открытого конструктора.
4. проверьте, имеет ли продукт частный конструктор
5. все перегрузки конструктора являются внутренними.