类型参数相互定义?A其中T1: Foo其中T2: T1

本文关键字:T1 T2 其中 Foo 定义 类型参数 | 更新日期: 2023-09-27 18:13:52

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

有一个实际的用例?

有什么区别?
class A<T1, T2>
    where T1 : Foo
    where T2 : Foo

?真正改变的是什么?

当涉及方差时是否相同?

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

区别在于T2不能是任意的Foo,它必须是由T1衍生而来的Foo

例如

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

当涉及方差时是否相同?

差异只在接口中起作用