• C# 6.0可能的新特性及C#发展历程


    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(包含链接),具体操作方式可参考此处。如您有任何疑问或者授权方面的协商,请给我留言
     
    分类: C#
    标签: C# 6.0C Sharp 6.0
  • 相关阅读:
    声明函数的是方式
    数组的相关属性和函数
    JS选择结构
    JS数据类型
    JS 运算符
    JS 变量
    响应式布局
    css的flex属性
    CSS中的度量单位
    BFC 规则
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3661505.html
Copyright © 2020-2023  润新知