【发布时间】:2010-05-27 04:19:23
【问题描述】:
现在我们在 C# 中的接口和委托上有了通用协变和逆变,我只是好奇如果给定一个 Type,你可以计算出它的通用参数的协变/逆变。我开始尝试编写自己的实现,它会查看给定类型的所有方法,并查看返回类型和/或参数是否与泛型参数中的类型匹配。问题是,即使我有这个:
public interface IFoo<T>
{
void DoSomething(T item);
}
使用我的逻辑,它看起来应该是逆变的,但是因为我们实际上并没有指定:
public interface IFoo<in T>
{
void DoSomething(T item);
}
(in 参数)它实际上不是逆变的。这引出了我的问题:有没有办法确定泛型参数的方差?
【问题讨论】:
-
你为什么需要那个?
-
@Mitch 我会在我弄清楚时告诉你:) 我只是出于好奇...
-
@MitchWheat 我今天用它来仔细检查我正在拉入 linqpad 脚本的库中的接口真的是协变的,因为我尝试的其他东西不会'编译。就是这样。
-
听起来很复杂……对我的小脑来说太复杂了……
标签: c# reflection covariance contravariance