请问C#6.0工作.NET 4.0?工作、NET

2023-09-02 20:45:17 作者:呆萌小迷糊

我创建了一个示例项目,用C#6.0的好东西 - 空传播和属性初始化作为一个例子,设定的目标版本的.NET 4.0和它的作品...

I created a sample project, with C#6.0 goodies - null propagation and properties initialization as an example, set target version .NET 4.0 and it... works.

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框架的C#6.0 4.6。 这个问题(和Visual Studio 2015 CTP测试)说CLR版本是4.0.30319.0。 此MSDN页面说,.NET 4,4.5,4.5.2使用CLR 4.没有任何有关.NET 4.6。

Wikipedia says .NET framework for C# 6.0 is 4.6. This question (and Visual Studio 2015 CTP test) says CLR version is 4.0.30319.0. This MSDN page says that .NET 4, 4.5, 4.5.2 uses CLR 4. There isn't any information about .NET 4.6.

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

Does it mean that I can use C# 6.0 features for my software that targets .NET 4.0? Are there any limitations or drawbacks?

推荐答案

是(主要)。 C#6.0需要新的罗斯林的编译器,但新的编译器可以针对老年framework版本。这仅限于新的功能,不需要从框架支撑

Yes (mostly). C# 6.0 requires the new Roslyn compiler, but the new compiler can compile targeting older framework versions. That's only limited to new features that don't require support from the framework.

例如,当你可以使用字符串插值功能在C#6.0与早期版本的.Net的(因为它导致调用的String.Format ):

For example, while you can use the string interpolation feature in C# 6.0 with earlier versions of .Net (as it results in a call to string.Format):

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

您需要的.Net 4.6使用它的 IFormattable ,因为只有新的框架版本增加了 System.FormattableString

You need .Net 4.6 to use it with IFormattable as only the new framework version adds System.FormattableString:

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

您提到不从架构需要类型的工作情况。所以编译器是完全能够支持这些功能的旧框架版本。

The cases you mentioned don't need types from the framework to work. So the compiler is fully capable of supporting these features for old framework versions.