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

Wes*_*Wes 4 c# generics covariance contravariance variance

是否

class A<T1, T2>
    where T1 : Foo
    where T2 : T1
Run Code Online (Sandbox Code Playgroud)

有一个实际的用例吗?

有什么区别

class A<T1, T2>
    where T1 : Foo
    where T2 : Foo
Run Code Online (Sandbox Code Playgroud)

?实际改变了什么?

涉及方差时是否相同?

juh*_*arr 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 {}
Run Code Online (Sandbox Code Playgroud)

将允许

var a = new A<Foo1, Foo12>()
Run Code Online (Sandbox Code Playgroud)

但不是

var a  = new A<Foo1, Foo2>()
Run Code Online (Sandbox Code Playgroud)

这也意味着您可以安全地将类型对象强制转换T2T1.

涉及方差时是否相同?

方差只与界面有关.