如果你正在为泛型类实现泛型扩展方法有更好的方法吗?
因为将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
}
}
答案 0 :(得分:4)
如果func2()
只有通用参数T
,编译器可以推断它,你可以在不指定参数的情况下调用它。
但如果您需要两个参数,则必须明确指定它们。类型推断是全部或全无:它可以推断所有使用的类型(并且您不必指定它们),或者它不能并且您必须指定所有类型。
答案 1 :(得分:2)
在您的示例中,班级A
不了解V
,只知道V
上下文中的func1
。所以func2不能神奇地推断出V
。