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));

 初看起來像Lambda表達式,其實和Lambda無關系。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM