针对早期框架的C#4.0项目
假设我创建了一个针对早期框架的C#4.0项目,c#,visual-studio-2010,c#-4.0,C#,Visual Studio 2010,C# 4.0,假设我创建了一个C#项目,它使用C#4.0特性-可选参数。如果我选择“.Net Framework 2.0”作为目标框架,会发生什么?编译器是否足够智能,能够独立生成与2.0兼容的IL,或者当部署在只有.Net framework 2.0的机器上时,Exe是否会给出运行时错误?在特定的可选参数情况下,兼容性将起作用,因为要使用的默认值存储在调用方的程序集中,而不是被调用的程序集中,因此确保了与其他程序集的兼容性。如果它编译,它将运行 可选参数只是一个合成糖。以下代码为目标framework 2.
C#项目
,它使用C#4.0特性-可选参数
。如果我选择“.Net Framework 2.0”
作为目标框架,会发生什么?编译器是否足够智能,能够独立生成与2.0
兼容的IL,或者当部署在只有.Net framework 2.0
的机器上时,Exe是否会给出运行时错误
?在特定的可选参数情况下,兼容性将起作用,因为要使用的默认值存储在调用方的程序集中,而不是被调用的程序集中,因此确保了与其他程序集的兼容性。如果它编译,它将运行
可选参数只是一个合成糖。以下代码为目标framework 2.0编译并运行:
internal class Program
{
public static class DummyClass
{
public static string Bar(int b = 10, int a = 12)
{
return a.ToString();
}
}
private static void Main(string[] args)
{
Console.WriteLine("{0}", DummyClass.Bar(a: 8));
Console.ReadKey();
}
}
阅读如果您这样做,那么使用新功能的源代码将无法编译。这个答案对于特定情况是正确的,但对于一般情况是错误的。我同意,在大多数其他情况下,它将无法编译。如果目标框架设置为.Net 2.0,那么自动实现的属性公共字符串str{get;set;}是否可以正常工作?[Optional,DefaultParameterValue(…)]被添加到具有可选参数的方法中。我想知道为什么.NETFramework2.0会意识到这个属性,因为它是.NET4.0的东西?它也会起作用:自动属性只是语法糖,可向后兼容到.net 2.0: