实现泛型类型的泛型扩展方法
本文关键字:扩展 方法 泛型 泛型类型 实现 | 更新日期: 2023-09-27 18:15:07
如果您正在实现泛型类的泛型扩展方法,是否有更好的方法?因为将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
}
}
如果func2()
只有泛型参数T
,编译器可以推断它,您可以不指定参数调用它。
但是如果您需要这两个参数,则必须显式指定它们。类型推断是要么全有要么全无:要么它可以推断所使用的所有类型(并且您不必指定它们),要么它不能,您必须指定所有类型。
在你的例子中,类A
不知道V
,它只知道func1
上下文中的V
。所以func2不能神奇地推断出V