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

我创建了一个带有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);

}

}

  • 维基百科说用于C#6.0的.NET框架是4.6。
  • 这个问题(和Visual Studio 2015 CTP测试)说CLR版本是4.0.30319.0。
  • 这个MSDN页面说.NET 4、4.5、4.5.2使用CLR4。没有有关.NET 4.6的任何信息。

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

回答:

是的(大部分)。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}";

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

以上是 C#6.0是否适用于.NET 4.0? 的全部内容, 来源链接: utcz.com/qa/422282.html

回到顶部