2011-01-23 9 views
0

私はスライダーユーザーコントロールを作成したとしましょう、ISliderインターフェイスを実装します。私はISlider型と標準のSliderコントロール型の両方を受け入れるべきSetValueのようなメソッドをいくつか持っています。私はこの重い構文を使用する義務がありますか?ショートカットはありますか?C#でクラスインタフェースを使用するときに構文を短縮する方法はありますか?

public void SetValue(Object slider, Double value) { 
    ISlider ISlider; 
    ISlider = slider as ISlider; 
    if (ISlider != null) 
    { 
     ISlider.Value = value; 
    } 
    else 
    { 
     ((Slider)slider).Value = value; 
    } 
+1

なぜ 'スライダー'は 'ISlider'を実装していませんか?代わりに、 'Slider'をラップする' ISlider'の実装を提供して、インタフェースを扱うだけで済むようにしましょう。 –

+1

SliderはMicrosoftの標準コントロールであるためです。私が知る限り、私はクラスインタフェースでこのような制御を拡張することはできませんおそらく私は間違っている? – user310291

+0

だから私は「代わりに、スライダをラップするISliderの実装を提供する」と言った。 –

答えて

2

あなたは、WPF Slider制御を行うことができないようにオーバーロードされたメソッドを使用して、あなたのISliderから継承します。

public void SetValue(ISlider slider, double value) 
{ 
    slider.Value = value; 
} 

public void SetValue(Slider slider, double value) 
{ 
    slider.Value = value; 
} 

これはきれいではありませんが、オブジェクトが正しいタイプであるかどうかを確認する必要がないため、頭痛を軽減できます。

+0

OPのコードをどのように手助けしていますか?変数が 'object'なので、オーバーロード解決は利用できません。 – CodesInChaos

+0

私は彼がメソッドに 'Slider'ま​​たは' ISlider'インスタンスを提供すると仮定しました。しかし、 'object'を供給すれば、あなたは正しいです。彼が私の答えを受け入れたことを考えると、私の前提は正しいと思われる。 – Femaref

関連する問題