自從2000年初期發佈以來,c#編程語言不斷的獲得改進,使咱們可以更加清晰的編寫代碼,也更加容易維護咱們的代碼,加強的功能已經從1.0搞到啦7.0甚至7.1,每一次改過都伴隨着.NET Framework庫的相應支持,也不斷的帶給咱們期待與驚喜。下面咱們就對c#一路走到如今,作一個回顧與學習。git
c#的設計目標是有如下幾點:程序員
旨在是一種簡單,現代,通用的面向對象編程語言。github
語言及其實現應該爲軟件工程原理提供支持,例如強類型檢查,數組維度檢查,未初始化的變量引用檢測以及自動垃圾收集。軟件的魯棒性,耐久性和程序員的生產力很重要。編程
旨在用於開發適用於分佈式環境中部署的軟件組件。c#
便攜性對於源代碼和程序員很是重要,特別是已經熟悉C和C ++的程序員。數組
支持國際化是很是重要的。異步
C#適用於爲託管和嵌入式系統編寫應用程序,從使用複雜的操做系統到很是小的專用功能都很是適用。編程語言
雖然C#應用程序在內存和處理能力要求方面是經濟的,可是該語言並不打算直接用C或彙編語言直接與性能和尺寸進行競爭。分佈式
c#版本函數
c#版本中添加的功能:
泛型
部分類型
匿名方法
迭代器
可空類型
Getter / setter單獨可訪問性
方法組轉換(表明)
Co- and Contra-variance for delegates
靜態類
Delegate inference
隱式類型局部變量
對象和收集初始化器
自動實現的屬性
匿名類型
擴展方法
查詢表達式
Lambda表達式
表達樹
部分方法
動態綁定
命名和可選參數
Generic co- and contravariance
嵌入式互操做類型(「NoPIA」)
異步方法
Caller info attributes
Compiler-as-a-service(Roslyn)
將靜態類型成員導入命名空間
異常過濾器
在Catch和Finally中使用Await
自動屬性初始化器
只讀屬性的默認值
Expression-bodied members
Null-conditional operators(空條件運算符,簡潔檢查)
字符串插值
字典初始化器
out變量
模式匹配
元組
解構
局部函數
數字分隔符
二進制文字
局部引用和引用返回
擴展異步返回類型
表達式的構造函數和finalizers
throw表達式
默認表達式
參考文檔:https://en.wikipedia.org/wiki/C_Sharp_(programming_language)#cite_note-roslyn_6-47
在2016年Visual Studio 「15」 Preview 4發佈,c# 7.0便開始浮現,如今vs2017已經發布,c#7.0帶給咱們的驚喜,咱們也該一探究竟啦。
C#7.0增長許多新功能,重點是數據,代碼簡化和性能上。
目前在C#中,使用out參數不像咱們想要的那麼流暢。在使用out參數調用一個方法以前,首先必須聲明變量來傳遞給它。您也不能使用var
它們來聲明它們,但須要指定完整的類型。
public void PrintCoordinates(Point p) { int x, y; //必須聲明 p.GetCoordinates(out x, out y); WriteLine($"({x}, {y})"); }
在c#7中再來看看
public void PrintCoordinates(Point p) { p.GetCoordinates(out int x, out int y); WriteLine($"({x}, {y})"); }
c#7中
public static void PrintStars(object o) { if (o is int i) Console.WriteLine(i + 12); }
之前版本須要轉化
public static void PrintStars(object o) { if (o is int) Console.WriteLine(Convert.ToInt32(o) + 12); }
public static void PrintStars(object o) { switch (o) { case Print p: break; case int a: break; case String b when b=="123": break; } } } public class Print { public string PrintName { get; set; } public string MoBanPath { get; set; } public int Count { get; set; } }
注意:元組依賴於一組基礎類型,不包括在預覽4中。要使功能正常工做,您能夠經過NuGet輕鬆獲取它們:
右鍵單擊解決方案資源管理器中的項目,而後選擇「管理NuGet軟件包...」
選擇「瀏覽」選項卡,選中「包含預發行」,而後選擇「nuget.org」做爲「包源」
搜索「System.ValueTuple」並安裝它。
static void Main(string[] args) { var tuple = (a: 10, b: "123"); Console.WriteLine($"a:{tuple.a},b:{tuple.b}"); var result1 = GetS(); var result = Get(); Console.WriteLine($"Item1:{result1.Item1},Item2:{result1.Item2},Item3:{result1.Item3}"); Console.WriteLine($"a:{result.a},b:{result.b},c:{result.c}"); Console.ReadLine(); } static (string, int, DateTime) GetS() { return ("abc", 123, DateTime.Now); } static (string a, int b, DateTime c) Get() { return (a: "abc", b: 123, c: DateTime.Now); }
簡單的說,就是在方法裏面寫方法而後本身調用。
注意:在預覽4中,本地函數必須在調用以前聲明。這個限制將被鬆開,因此一旦他們讀取的局部變量被明確地分配,就能夠調用這個限制。
static void Main(string[] args) { Console.WriteLine($"{Get(123)},{Get("abc")},{Get(null)}"); Console.ReadLine(); } public static string Get(object a) { return GetP(); string GetP() { if (a is int v) return v + ""; if (a is string b) return b; return "ccc"; } }
C#7.0容許在數字文字中_
做爲數字分隔符出現:
var d = 123_456; var x = 0xAB_CD_EF;
你能夠把它們放在數字之間,以提升可讀性。它們對價值沒有影響。
另外,C#7.0引入了二進制文字,所以您能夠直接指定位模式,而沒必要以心臟知道十六進制符號。
var b = 0b1010_1011_1100_1101_1110_1111;
到此,我就不在一個個的上演c#7.0的其餘功能啦。若是你想深刻其餘,仔細閱讀下面的文檔:
請參考文檔:https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/
如下新功能在VS 2015及17中實現並可用。
ADD:新增,Exists:已存在,N/A:對該語言沒有意義,No:不適用此版本。
下面我簡述幾個新功能,剩下的我會把文檔鏈接拿出來本身觀摩。
上面的代碼中都有體現。
var s = $"{p.Name} is {p.Age} year{{s}} old";
var numbers = new Dictionary<int, string> { [7] = "seven", [9] = "nine", [13] = "thirteen" };
public class Customer { public string First { get; set; } = "Jane"; public string Last { get; set; } = "Doe"; }
using static System.Console; using static System.Math; using static System.DayOfWeek; class Program { static void Main() { WriteLine(Sqrt(3*3 + 4*4)); WriteLine(Friday - Monday); } }
線上代碼可執行演示文檔鏈接:http://www.volatileread.com/Wiki/Index?id=1075 效果以下
參考文檔:https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23-6
鏈接地址:https://msdn.microsoft.com/en-us/magazine/ff796223.aspx
鏈接地址:https://msdn.microsoft.com/en-us/library/bb308966.aspx
鏈接地址:https://msdn.microsoft.com/en-us/library/7cz8t42e(v=vs.80).aspx
接下來是你們最喜歡的總結內容啦,內容有二,以下:
一、但願能關注我其餘的文章。
二、博客裏面有沒有很清楚的說明白,或者你有更好的方式,那麼歡迎加入左上方的2個交流羣,咱們一塊兒學習探討。