zoukankan      html  css  js  c++  java
  • 转载——C# 6.0可能的新特性及C#发展历程

            据扯,C# 6.0在不远的将来就发布了,对应的IDE可能是VS 2014(.Net Framework 5.0),因为VS 2013已于2013年10月份发布了,对应的是.Net Franework 4.5.1。

    从Visual Studio的更新规律上来看,微软2或者3年,更新增加的东西会比较多,所以对于C# 6.0,还是有一些期待的。

    下面这张图列出了C#每次重要更新的时间及增加的新特性,对于了解C#这些年的发展历程,对C#的认识更加全面,是有帮助的。其中图的最后一行C#6.0是根据一些博客整理的,如有错误,随时改正。

    C# 6.0可能的新特性

    1、主构造函数(Primary Constructors)

      主构造函数给类中的变量赋值

    Before

    public class Point {
        private int x, y;
    
        public Point(int x, int y)
            this.x = x;
            this.y = y;
        }
    }

     After

    public class Point(int x, int y) {
        private int x, y;
    }

    2、自动属性赋值(Auto Properties)

    Before

      class Point
        {
            public int X { get; private set; }
            public int Y { get; private set; }
    
            public Point()
            {
                this.X = 100;
                this.Y = 100;
            }
        } 

    After

      class Point
        {
            public int X { get; private set; } = 100;
            public int Y { get; private set; } = 100;
        } 

    3、using静态类(Static type using statements;)

    using会把引用类的所有静态方法导入到当前命名空间

    Before

    public double A { get { return Math.Sqrt(Math.Round(5.142)); } }

    After

    using System.Math;
    ...
    public double A { get { return Sqrt(Round(5.142)); } }

    4、Property Expressions

    Before

    public double Distance {
        get { return Math.Sqrt((X * X) + (Y * Y)); }
    }

    After

    public double Distance => Math.Sqrt((X * X) + (Y * Y));

     初看起来像Lambada表达式,其实和Lambada无关系。

    5. Method Expressions

    Before

    public Point Move(int dx, int dy) {
        return new Point(X + dx1, Y + dy1);
    }

    After

    public Point Move(int dx, int dy) => new Point(X + dx, Y + dy);

    这个和Property Expressions类似

    6、Params for enumerables

    Before

    Do(someEnum.ToArray());
    ...
    public void Do(params int[] values) { ... }

    After

    Do(someEnum);
    public void Do(params IEnumerable<Point> points) { ... }

     以前params是只可以修饰array类型的参数,现在多了一些类型

    7、Monadic null checking(null检查运算符)

    Before

    if (points != null) {
        var next = points.FirstOrDefault();
        if (next != null && next.X != null) return next.X;
    }   
    return -1;

    After

    var bestValue = points?.FirstOrDefault()?.X ?? -1;

    这个少了好几行代码,赞啊 

    8、Constructor type parameter inference

    Before

    var x = MyClass.Create(1, "X");
    ...
    public MyClass<T1, T2> Create<T1, T2>(T1 a, T2 b) {
        return new MyClass<T1, T2>(a, b);
    }

    After

    var x = new MyClass(1, "X");

    9、 Inline declarations for out params(内联out参数定义)

    Before

    int x;
    int.TryParse("123", out x);

    After

    int.TryParse("123", out int x);

    说实话,这个很常用。

    当然,C# 6.0的全部新特性不止这么多,限于篇幅,就整理这些,若想了解更多,请参考下面的链接。

    参考资料:

    http://roslyn.codeplex.com/wikipage?title=Language%20Feature%20Status&referringTitle=Documentation

    http://en.wikipedia.org/wiki/.NET_Framework_version_history

    http://damieng.com/blog/2013/12/09/probable-c-6-0-features-illustrated

    http://www.kunal-chowdhury.com/2012/07/evolution-of-c-10-50-what-are-new.html

    http://www.cnblogs.com/TianFang/p/3647144.html

    本文基于署名 GPL 许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名lhking(包含链接),具体操作方式可参考此处。如您有任何疑问或者授权方面的协商,请给我留言。
     
    转载自:http://www.cnblogs.com/lhking/p/3660182.html
  • 相关阅读:
    PATA 1071 Speech Patterns.
    PATA 1027 Colors In Mars
    PATB 1038. 统计同成绩学生(20)
    1036. 跟奥巴马一起编程(15)
    PATA 1036. Boys vs Girls (25)
    PATA 1006. Sign In and Sign Out (25)
    读取web工程目录之外的图片并显示
    DOS命令
    java连接oracle集群
    servlet
  • 原文地址:https://www.cnblogs.com/ShaYeBlog/p/3661424.html
Copyright © 2011-2022 走看看