2011-12-17 28 views
3

因此,我在我的項目中製作了一堆用戶控件,它們自動集成到系統中,跟蹤有關它們的某些事情。但是我不確定如何去做某個部分,而不是看起來很醜陋。用相同的方法自定義用戶控件,以相同的方式調用它們

所有控件都是從不同的控件類型(面板,文本框,組合框等)擴展而來,但有幾個完全相同的方法。

我想這樣做是避免這種情況:

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

爲什麼你同時使用「是」,比「爲」?我會做'是'+'cast'或者只做'as'一次,然後檢查是否爲空。 –

+0

因爲這個優化與原來的問題沒有關係;) – Restuta

+0

所有的方法看起來都很混亂。我平等地討厭所有這些問題並解決問題,正如 – Corylulu

2

將消息放入接口,並使所有控件都實現接口。

然後,您的方法可以直接使用該接口,並將與任何控件一起使用。

相關問題