Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
针对早期框架的C#4.0项目_C#_Visual Studio 2010_C# 4.0 - Fatal编程技术网

针对早期框架的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: