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)
这也意味着您可以安全地将类型对象强制转换T2为T1.
涉及方差时是否相同?
方差只与界面有关.
| 归档时间: |
|
| 查看次数: |
2752 次 |
| 最近记录: |