一尘不染

C#6.0是否适用于.NET 4.0?

c#

我创建了一个带有C#6.0好东西的示例项目-以零传播和属性初始化为例,设置目标版本.NET 4.0即可。

public class Cat
{
    public int TailLength { get; set; } = 4;

    public Cat Friend { get; set; }

    public string Mew() { return "Mew!"; }
}

class Program
{
    static void Main(string[] args)
    {
        var cat = new Cat {Friend = new Cat()};
        Console.WriteLine(cat?.Friend.Mew());
        Console.WriteLine(cat?.Friend?.Friend?.Mew() ?? "Null");
        Console.WriteLine(cat?.Friend?.Friend?.TailLength ?? 0);
    }
}

这是否意味着我可以针对针对.NET 4.0的软件使用C#6.0功能?有任何限制或缺点吗?


阅读 617

收藏
2020-05-19

共1个答案

一尘不染

是的(大部分)。C#6.0需要新的Roslyn编译器,但是新的编译器可以针对较旧的框架版本进行编译。仅限于 不需要框架支持的 新功能。

例如,虽然您可以将C#6.0中的字符串插值功能与.Net的早期版本结合使用(因为它会导致对的调用string.Format):

int i = 3;
string s = $"{i}";

您需要.Net 4.6才能使用它,IFormattable因为仅新的框架版本添加了以下内容System.FormattableString

int i = 3;
IFormattable s = $"{i}";

您提到的案例不需要框架中的类型即可工作。因此,编译器完全能够为旧框架版本支持这些功能。

2020-05-19