.net 中逆变和协方差的实际使用
Real world use of Contravariance and Covariance in .net
我想知道我们使用 逆变和协方差 和 program.I 的真实场景看到了各种博客,但我仍然很困惑在哪里可以实现。
你写过foreach
吗?如果你有那么你已经使用了 Covariance 所以这就是现实世界的用法。您可以在任何实现 IEnumerable 的类型上使用 foreach
。这是 IEnumerable
的签名:
public interface IEnumerable<out T> : IEnumerable
^^
||
// See the above out keyword
out
关键字用于 协方差 ,因此它仅适用于 return 类型。
你用过IComparable接口,那你用过逆变。这是签名:
public interface IComparer<in T>
^^
||
// See the above in keyword
in
关键字用于逆变,因此它仅适用于接口成员的参数类型。
如果缺少 out
和 in
关键字,则它适用于输入参数和 return 参数。那叫invariance
.
我想知道我们使用 逆变和协方差 和 program.I 的真实场景看到了各种博客,但我仍然很困惑在哪里可以实现。
你写过foreach
吗?如果你有那么你已经使用了 Covariance 所以这就是现实世界的用法。您可以在任何实现 IEnumerable 的类型上使用 foreach
。这是 IEnumerable
的签名:
public interface IEnumerable<out T> : IEnumerable
^^
||
// See the above out keyword
out
关键字用于 协方差 ,因此它仅适用于 return 类型。
你用过IComparable接口,那你用过逆变。这是签名:
public interface IComparer<in T>
^^
||
// See the above in keyword
in
关键字用于逆变,因此它仅适用于接口成员的参数类型。
如果缺少 out
和 in
关键字,则它适用于输入参数和 return 参数。那叫invariance
.