可选参数在目标框架3.5中起作用,而对泛型的协方差和逆变则不起作用

时间:2012-08-07 20:45:16

标签: c# .net c#-4.0

最近ReSharper在我的 Visual Studio 2010 解决方案中建议我可以在我的一个方法中使用可选参数。我感到很惊讶,因为项目的目标是.NET 3.5,据我所知,可选参数是在C#4.0中引入的。

但是我做了一个改变并且编译了。

另一方面,我尝试了协方差和逆变与 .NET Framework 3.5 generic IEnumerable 一起使用,但事实并非如此。你能告诉我缺少什么知识吗?

1 个答案:

答案 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的通用界面差异能力 - 在文档中通常称为“泛型中的协方差和反向差异”。