2011-12-17 1 views
3

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

Все элементы управления расширены из разных типов управления (панель, текстовое поле, Combobox и т. Д.), Но имеют несколько одинаковых методов.

То, что я хотел бы сделать, это избежать этого:

public void SendMyMessage(Control thisControl) 
{ 
    if(thisControl is myPanel) (thisControl as myPanel).SendMessage(); 
    else if(thisControl is myComboBox) (thisControl as myComboBox).SendMessage(); 
    else if(thisControl is myTextbox) (thisControl as myTextbox).SendMessage(); 
    else if(thisControl is myLabel) (thisControl as myLabel).SendMessage(); 
} 

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

ответ

2

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

if (thisControl is IMessageSender) 
    (thisControl as IMessageSender).SendMessage(); 

где интерфейс выглядит следующим образом:

public interface IMessageSender 
{ 
    void SendMessage(); 
} 
+0

Почему вы используете как «есть», а не «как»? Я бы сделал «is» + «cast» или просто сделал «как» один раз, а затем проверил значение null. –

+0

Потому что эта оптимизация не имеет никакого отношения к исходному вопросу;) – Restuta

+0

Все способы выглядят беспорядочно для меня. Я ненавижу всех их одинаково и соглашаюсь с is-as – Corylulu

2

Поместите это сообщение в интерфейс, и все элементы управления реализуют интерфейс.

Ваш метод может непосредственно использовать интерфейс напрямую и будет работать с любым из элементов управления.

Смежные вопросы