实现泛型类型的通用扩展方法

时间:2011-11-19 16:15:46

标签: c# generics extension-methods

如果你正在为泛型类实现泛型扩展方法有更好的方法吗? 因为将func2完全称为func1<V>()而不是func2<T, V>()是很自然的,即省略T参数并将其称为func2<V>()

public class A<T> where T : class {

    public V func1<V>() {
        //func1 has access to T and V types
    }
}

public static class ExtA {

    // to implement func1 as extension method 2 generic parameters required
    // and we need to duplicate constraint on T 
    public static V func2<T, V>(this A<T> instance) where T : class {
        // func2 has access to V & T 
    }
}

2 个答案:

答案 0 :(得分:4)

如果func2()只有通用参数T,编译器可以推断它,你可以在不指定参数的情况下调用它。

但如果您需要两个参数,则必须明确指定它们。类型推断是全部或全无:它可以推断所有使用的类型(并且您不必指定它们),或者它不能并且您必须指定所有类型。

答案 1 :(得分:2)

在您的示例中,班级A不了解V,只知道V上下文中的func1。所以func2不能神奇地推断出V