【问题标题】:C# 4.0 project targeting earlier framework针对早期框架的 C# 4.0 项目
【发布时间】:2013-12-23 09:55:52
【问题描述】:

假设我创建了一个使用C# 4.0 features - optional parameterC# project。如果我选择'.Net Framework 2.0' 作为目标框架会发生什么?编译器是否足够智能以自行生成与2.0 兼容的IL,或者当部署在只有.Net framework 2.0 的机器上时,Exe 是否会提供runtime error

【问题讨论】:

  • 如果这样做,使用新功能的源将无法编译。

标签: c# visual-studio-2010 c#-4.0


【解决方案1】:

在可选参数的特定情况下,兼容性将起作用,因为要使用的默认值存储在调用者的程序集中而不是被调用的程序集中,因此可以确保与其他程序集的兼容性。如果它编译,它将运行。

可选参数只是语法糖。以下代码针对目标框架 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();
    }
}

阅读a full explanation by Mr Botelho

【讨论】:

  • 这个答案对于特定情况是正确的,但对于一般情况是错误的。
  • 我同意,在大多数其他情况下它不会编译
  • 很好的解释亚历克斯。自动实现的属性怎么样? public string str {get; set;} 如果目标框架设置为 .Net 2.0,这些可以正常工作吗?
  • [Optional, DefaultParameterValue(...)] 被添加到具有可选参数的方法中。我想知道 .Net 框架 2.0 是如何意识到这个属性的,因为它是 .Net 4.0 的东西? naveensrinivasan.com/2010/04/16/…
  • 它也可以:自动属性只是语法糖,向后兼容 .net 2.0:stackoverflow.com/questions/9393982/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 1970-01-01
  • 2014-10-14
  • 2011-04-23
相关资源
最近更新 更多