输入相互定义的参数? A类<t1,t2 =“”>其中T1:Foo,其中T2:T1

时间:2015-09-21 16:53:18

标签: c# generics covariance contravariance variance

class A<T1, T2>
    where T1 : Foo
    where T2 : T1

有实际用例吗?

有什么不同
class A<T1, T2>
    where T1 : Foo
    where T2 : Foo

?实际改变了什么?

涉及方差时是否相同?

1 个答案:

答案 0 :(得分:10)

区别在于T2不能只是Foo Foo,而是T1来自public class Foo{} public class Foo1 : Foo {} public class Foo2 : Foo {} public class Foo12 : Foo1 {} public class A<T1,T2> where T1: Foo where T2 : T1 {}

例如

var a = new A<Foo1, Foo12>()

将允许

var a  = new A<Foo1, Foo2>()

但不是

T2

这也意味着您可以安全地将T1类型的对象转换为row_number()

  

涉及方差时是否相同?

方差只与界面有关。