2012-02-17 132 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

扩展方法不能用于实现接口。扩展方法仅适用于调用者,并且仅在编译时:不适用于实际类本身 – 2012-02-17 10:43:51

回答

8

如果我正确地理解了这个问题,您想要定义一个扩展方法,它只适用于UserControls,它实现了IBlue

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

    } 
+0

是的,这就是我正在尝试做的。试试看吧 – 2012-02-17 10:49:05

+0

我得到“一个约束子句已经被指定为类型参数'T',一个类型参数的所有约束必须在一个单独的子句中指定。 – 2012-02-17 10:53:34

+0

更新 - 应该编译(只是试了一下)。在某些条件下子句有多个条款是有效的。 – 2012-02-17 10:55:54