2009-05-21 4 views
1

У меня вопрос дизайна. При написании приложения, в котором есть несколько компонентов, которые разделяют некоторые атрибуты, и отличаются друг от друга как с точки зрения графического интерфейса (оконных форм), так и с обратной стороны, как теоретически можно подойти к этому?Интерфейсы, наследование и формы окон в C#

Например, у меня есть приложение, в котором у меня есть 4 разных типа продукта. Формы для ввода сведений о продукте все разделяют 3 разных поля. До сих пор простой - иметь базовый класс, а затем выводить из этого базового класса 4 формы. Однако, скажем, у 2 продуктов есть определенное поведение, которое является ТОЛЬКО для обоих из них. Конечно, у меня мог бы быть интерфейс, который определяет методы, а затем эти две формы ввода продукта реализуют этот интерфейс, но поскольку интерфейс не обеспечивает реализацию по умолчанию, разве это не было бы отходом от этого? Поскольку я должен был бы обеспечить реализацию в каждом классе, и если бы он был точно таким же, это было бы повторением кода.

Я мог бы, конечно, поместить этот метод в базовый класс и получить из него 2 формы. Если мои формы разделяют более одного общего элемента и не разделяют другие элементы, то какой был бы самый безопасный, самый логичный способ представить это без необходимости вырывать мои волосы?

ответ

0

Один из способов получить общее поведение на два класса для двух классов в содержат, что поведение в качестве члена, а наследуя что поведение: для форм, это может означать, определяющий «пользовательский элемент управления» (т.е. многоразовая коллекция общих элементов управления).

+0

Разве это не означает повторение? – sarsnake

+0

Это не копирование и вставка; он говорит, что обе формы включают в себя, как и элемент данных, экземпляр класса MyUserControlWithABunchOfCommonFunctionality. – ChrisW

0

Трудно сказать без какой-либо конкретной схемы. в общем, другая, часто более гибкая форма повторного использования делает композицию вместо наследования. На самом деле иерархия управления показывает, насколько сильная композиция может идти. Возможно, вы можете разделить части своего пользовательского интерфейса на пользовательские элементы управления, которые собираются на основе конкретного макета продукта, который вы после

2

Почему бы вам не получить 2 несвязанных класса непосредственно из вашего базового класса, а затем создать новый класс с общим функциональность и выводится из базового класса, а оставшиеся два класса наследуются от этого нового класса?

BaseClass 
CommonClass : BaseClass 
ClassA : BaseClass 
ClassB : BaseClass 
ClassC : CommonClass 
ClassD : CommonClass 
Смежные вопросы