gpt4 book ai didi

c# - 可选参数在目标框架 3.5 中工作,而泛型的协变和逆变不工作

转载 作者:行者123 更新时间:2023-11-30 16:23:08 24 4
gpt4 key购买 nike

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

但我进行了更改并编译成功。

另一方面,我尝试了协变和逆变是否适用于 .NET Framework 3.5 generic IEnumerable,但它没有。你能告诉我我缺少什么知识吗?

最佳答案

泛型接口(interface)和委托(delegate)的变体是在 .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留下了足够重要的评论,它应该成为答案的一部分:

Variance has always in .NET, for example arrays of reference types have always been covariant. As well, method group variance has been around since .NET 2.0. What you're talking about is the added generic interface variance abilities added to C# 4--often referred to as "Covariance and Contravariance in Generics" in the documentation.

关于c# - 可选参数在目标框架 3.5 中工作,而泛型的协变和逆变不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11853857/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com