2011-12-17 9 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

だから、一つだけのチェックを持つことができますか?私は 'is' + 'cast'をやるか、単に 'as'をしてからnullをチェックします。 –

+0

コスこの最適化は元の質問には関係ありません;) – Restuta

+0

すべての方法は私に乱雑に見えます。私はそれらのすべてを平等に嫌い、is-asで修理する。 – Corylulu

2

メッセージをインターフェイスに入れ、すべてのコントロールにインターフェイスを実装させる。

あなたのメソッドはインターフェイスを直接使用するだけで、どのコントロールでも動作します。

関連する問題