日期:2014-05-17  浏览次数:20921 次

怎么写扩展方法?
现在有classA,classB两个类,我想为classA和classB写一个扩展方法,但是不希望其他类能够具有这个扩展方法,这里应该如何对泛型参数T进行限制?
public static T SomeMethod<T>(this T source, object param)
{
     ....
}

------解决方案--------------------
这个好像只能写两遍了吧。要不用Object作为参数,函数内用反射?
------解决方案--------------------
扩展方法只能扩展到一种类型上,即第一个参数,且必须用this指明
public static T Test<T, R>(this T t, R r) 
    where T : A 
    where R : B

要么另外再封装一个泛型类,再写扩展
public class C<T, R> where T : A where R : B {}

public static C Test(this C c, object param)
public static T Test<T>(this T t, object param) where T : C
------解决方案--------------------
封装一个classA和classB的父类RootClass,  
然后写RootClass的扩展方法
public static void Function<T>(this T aa)where T:RootClass       
         {
            XXXXX;
        }
------解决方案--------------------
引用:
Quote: 引用:

这个好像只能写两遍了吧。要不用Object作为参数,函数内用反射?

我是希望只能在这两个类的实例上才显示扩展方法,其他类型实例就不会显示


那就写两遍吧,

或者封装一个函数,参数是Object,用反射调用。扩展函数中调用这个封装的函数。
------解决方案--------------------
引用:
封装一个classA和classB的父类RootClass,  
然后写RootClass的扩展方法
public static void Function<T>(this T aa)where T:RootClass       
         {
            XXXXX;
        }
那就定义2个方法分别扩展A和B
------解决方案--------------------
让classA和classB继承于同一个借口,然后扩展方法where T:那个接口