2012-02-17 53 views
4

私はそうのように定義されたユーザーコントロールのセットを持っている...拡張メソッドは

public class Control1: UserControl, Shop.Stock.IBlue 

public class Control2: UserControl, Shop.Stock.IBlue 

public class Control2: UserControl, Shop.Stock.IBlue 

ノートでは、約200これらのがあり、彼らは実際のプロジェクトでは、より良い名前が付けられています。私は拡張メソッドは、単にユーザーコントロール

のにしたくないユーザーコントロールをオフに基づいているオブジェクトの拡張メソッドを記述し、インターフェイスShop.Stock.IBlue

を実装したい

があります新しい基本クラスを追加することなくこれを行う方法?

+2

インターフェイスを実装するために拡張メソッドを使用することはできません。拡張メソッドは呼び出し側のためのもので、コンパイル時にのみ使用されます。実際のクラス自体ではありません –

答えて

8

質問を正しく理解している場合は、IBlueを実装するUserControlsにのみ適用可能な拡張方法を定義する必要があります。

public static void Foo<T>(this T obj) 
     where T : UserControl, IBlue 
    { 

    } 
+0

それは私がやろうとしていることです。 –

+0

私は "制約節は型パラメータ 'T'に既に指定されています。型パラメータのすべての制約は単一のwhere節に指定する必要があります。" –

+0

更新 - コンパイルする必要があります(試してみました)。特定の条件で複数のwhere句が有効です。 –