最近ReSharper在我的 Visual Studio 2010 解决方案中建议我可以在我的一个方法中使用可选参数。我感到很惊讶,因为项目的目标是.NET 3.5,据我所知,可选参数是在C#4.0中引入的。
但是我做了一个改变并且编译了。
另一方面,我尝试了协方差和逆变与 .NET Framework 3.5 generic IEnumerable 一起使用,但事实并非如此。你能告诉我缺少什么知识吗?
答案 0 :(得分:3)
.NET Framework 2.0中引入了通用接口和委托的差异,但只有在C#4.0编译器能够利用它之后才能用于开发人员。
直到.NET Framework 4,框架的库类型才更新为这种类型的方差。 .NET 3.5泛型方差适用于C#4编译器,但仅适用于您自己的类型。这可以在.NET Framework 3.5上使用C#4编译器进行编译。
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留下了一个足够重要的评论,它应该成为答案的一部分:
Variance总是在.NET中,例如引用类型的数组一直是协变的。同样,自.NET 2.0以来,方法组差异一直存在。您所谈论的是添加到C#4的通用界面差异能力 - 在文档中通常称为“泛型中的协方差和反向差异”。