(я удалил свой предыдущий ответ, потому что я думаю, что он на самом деле был неверным.)
Похоже, вам нужна абстракция между вашими элементами управления и UserControl
, которая представляет общую функциональность. Есть два основных способа сделать это, и какой из них вы используете, это вопрос личных предпочтений кодирования, как вы планируете их расширять, как вы организовываете свой код в проекте и т. Д. *
- Наследовать от базового класса. По сути, создайте класс
MyCustomControl
(или как вы хотите его назвать), который реализует общую функциональность между вашими пользовательскими элементами управления. Это наследуется от UserControl
, а ваши элементы управления наследуются от этого. Тогда ваш метод будет ожидать / вернуть массив этого базового класса.
- Реализация интерфейса. Вы можете создать интерфейс
ICustomControl
(или как вы хотите его назвать), который представляет общую функциональность ваших пользовательских элементов управления. Тогда ваши элементы управления наследуются от UserControl
, а также реализуют ICustomControl
. Тогда ваш метод будет ожидать / вернуть массив этого типа интерфейса.
Я лично предпочитаю интерфейсный подход. Наследование имеет тенденцию быть чрезмерно используемым во многих объектно-ориентированных кодах людей, и на самом деле не должно быть. Интерфейс лучше представляет абстракцию (или контракт кода) как тип (в отличие от класса). Но это гораздо большая дискуссия в другой раз, я полагаю:)