【问题标题】:Differences between C# 2 and 3C# 2 和 3 之间的差异
【发布时间】:2009-07-18 02:16:28
【问题描述】:

我对 C# 或 .net 知之甚少,但我有兴趣了解它们。

让我感兴趣的一件事是,我不断听到“C# 3 真的很棒”。
这是为什么?与 C# 2 有什么区别。仅在 C# 中还是在 .net 中也有区别?

提前致谢。

【问题讨论】:

标签: c# .net c#-3.0 c#-2.0


【解决方案1】:

我有一篇关于这个的小文章:Bluffer's Guide to C# 3。显然my book 中有更多详细信息,但这应该足以让您继续前进。简而言之:

  • 自动实现的属性:

    public int Value { get; set; }
    
  • 对象和集合初始化器:

    Form form = new Form { Size = new Size(100, 100),
                           Controls = { new Label { Text = "Hi" } }
                         };
    List<string> strings = new List<string> { "Hi", "There" };
    
  • 隐式类型的局部变量:

    var x = new Dictionary<string, int>(); // x is still statically typed
    
  • 隐式类型数组:

    DoSomething(new[] { "hi", "there"}); // Creates a string array
    
  • 匿名类型:

    var jon = new { Name = "Jon", Age = 33 };
    
  • Lambda 表达式(类似于匿名方法,但更短):

    Func<string, int> lengthFunc = x => x.Length;
    
  • 表达式树:

    // Representation of logic as data
    Expression<Func<string, int>> lengthExpression = x => x.Length;
    
  • 扩展方法:(静态方法,其第一个参数的类型类似于实例方法)

    public static string Reverse(this string text)
    {
        char[] chars = text.ToCharArray();
        Array.Reverse(chars);
        return new string(chars);
    }
    
    ...
    
    string hello = "olleh".Reverse();
    
  • 查询表达式:

    var query = from person in people
                where person.Age > 18
                select person.Name;
    

【讨论】:

  • 我强烈推荐这本书的扩展版:)
【解决方案2】:

您可以在Wikipedia article 中阅读有关 C# 3.0 中引入的所有内容。

【讨论】:

    【解决方案3】:

    这个问题太大了,回答你问题的最佳来源是C# in depthJon Skeet

    【讨论】:

      【解决方案4】:

      C# 3.0 最突出的主题是数据,它是通过语言集成查询 (LINQ) 实现的。大多数其他语言功能,例如隐式类型化的局部变量、匿名类型、lambda 表达式和扩展方法,都被添加以支持 LINQ。 LINQ 是一种在代码中编写类似 SQL 的语句来查询多种类型的数据源的方法。吸引人的地方在于,您现在有一种通用的方式来编写代码来访问不同的数据源,这意味着您不必在每次 MS 引入新的数据访问技术或您需要使用第三方数据源。由于大多数主要数据库供应商都以某种方式支持 LINQ,因此这种查询数据的通用方式的好处今天正在实现。

      有些人喜欢 LINQ,有些人不喜欢。我的阵营认为它是对语言的一个很好的补充,但你应该看看你自己的要求和情况,并就采用 C# 3.0 是否适合你做出明智的决定。

      【讨论】:

        【解决方案5】:

        Here's a list 3.0 中的一些新内容。很多很棒的东西。

        【讨论】:

          【解决方案6】:

          Linq、lambda、var keywork、目标树、匿名对象、较短的属性语法、对象初始化器、集合初始化器、扩展方法。

          但是 Lambda 和扩展方法是最重要的。 C# 3.0 非常棒。

          【讨论】:

            【解决方案7】:

            真正的区别在于 C# 而不是(仅)在 .NET 中。

            有趣的是,借助 Visual Studio 2008 多目标,您可以在以前仅限于 C# 2.0 的 .NET 2.x 项目中使用 C# 3.0 中的大部分好东西。

            你没有得到

            • 表达式树转换,
            • Linq 查询关键字,[Skeet 说你可以...]

            但你确实得到了

            • Lamda 表达式 [Skeet 这么说]
            • 集合和对象初始化器
            • 隐式类型的局部变量和匿名类型,即var
            • 自动实现的属性和
            • 部分方法定义

            所以,开始使用新的语法糖吧。

            【讨论】:

            • 实际上 lambda 表达式适用于 .NET 2,但不适用于表达式树转换。如果您有正确的支持成员,例如,LINQ 查询表达式将起作用。由于 LINQBridge。
            【解决方案8】:

            关于这个话题的文章很多:

            见:http://www.developer.com/net/csharp/article.php/3561756

            【讨论】:

              【解决方案9】:

              C#的演变是这样的:

              • 1.0:托管代码
              • 2.0:泛型
              • 3.0:LINQ
              • 4.0:动态编程
              • 5.0:异步编程

              请参阅来自 PDC 10 的 Anders Hejlsberg 的演示文稿 The Future of C# and Visual Basic 中的幻灯片 5。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2011-11-07
                • 2017-06-03
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-10-16
                • 2018-04-26
                相关资源
                最近更新 更多