可选参数在目标框架 3.5 中有效,而泛型上的协方差和逆变则不工作
本文关键字:方差 工作 泛型 目标 参数 框架 有效 | 更新日期: 2024-11-08 08:02:20
>最近,ReSharper在我的Visual Studio 2010解决方案中建议我可以在其中一个方法中使用可选参数。我很惊讶,因为项目面向 .NET 3.5,据我所知,可选参数是在 C# 4.0 中引入的。
但是我做了一个更改,它编译了。
另一方面,我尝试了协方差和逆变是否适用于.NET Framework 3.5通用IEnumerable,但没有。你能告诉我我缺少什么知识吗?
泛
型接口和委托的差异是在 .NET Framework 2.0 中引入的,但在 C# 4.0 编译器能够利用它之前,仅供开发人员使用。
直到 .NET Framework 4 才针对这种类型的差异更新了框架的库类型。 .NET 3.5 泛型差异适用于 C# 4 编译器,但仅适用于您自己的类型。这在使用 C# 4 编译器的 .NET Framework 3.5 上编译得很好。
public interface IFoo<out T>
{
T Bar();
}
public class Baz<T> : IFoo<T>
{
public T Bar()
{
return default(T);
}
}
public class Program
{
static void Main()
{
IFoo<IConvertible> foo = new Baz<string>();
}
}
彼得·里奇(Peter Richie)留下了一条评论,该评论具有足够的重要性,它应该成为答案的一部分:
方差始终在 .NET 中,例如,引用类型的数组始终是协变的。同样,方法组差异自 .NET 2.0 以来一直存在。您所说的是添加到 C# 4 的添加的泛型接口方差功能,在文档中通常称为"泛型中的协方差和逆变"。