閱讀筆記不是講述這本書的內容,只是提取了其中一部分我認爲比較重要或者尚未掌握的知識,因此若是有錯誤或者模糊之處,請指正,謝謝!數組
對於C# 6.0纔有的新語法基本都有標記,開發的時候要注意使用,以避免形成不兼容現象。多線程
一。第一章
1.控制檯中可使用,其會在每一次輸入的時候獲取鍵盤輸入的值。能夠用Console.ReadKey().KeyChar獲取輸入的字符。函數
void UseReadKey() { var a = Console.ReadKey().KeyChar; Console.WriteLine(a); }
2.C#6.0新語法:$"this is {變量名}" 能夠在大括號中直接輸入變量名調用,相似於string.Format(),更加簡潔。this
void UseNewFormat() { string FirstName = "First"; string LastName = "Last"; Console.WriteLine($"The Name is :{FirstName} {LastName}"); }
3.靜態引用 using Static System.Console; 能夠將Console.WriteLine();縮寫成WriteLine(); 僅能對靜態函數縮寫。spa
using static System.Console; void UseStaticUsing() { string Str = Read(); WriteLine(Str); }
二。第二章
1.小數位過多時候,直接轉換爲字符串會丟失精度,使用 string.Format("{0:R}",a);就不會丟失精度。線程
void UsingFormatR() { double Str=3.15489764531879874; Console.WriteLine(Str);//會丟失一部分 顯示3.154897645318 Console.WriteLine("{0:R}",Str);//不會丟失 顯示3.1548976453187989 爲何會比賦值數值少,由於 }
2.可空修飾符 值類型+? 默認值爲nullcode
void UseNullable() { double? Db = null; int? It = null; }
3.嘗試轉換 值類型特有 只在能夠轉換的時候進行轉換。 orm
string a = "456789"; string b = "abce456"; int inta=0; int intb=0; var boola = int.TryParse(a,out inta);//返回true,inta=456789 var boolb= int.TryParse(b,out intb);//返回false,intb=0
4.溢出檢測 checked{} 當塊內的數據溢出的時候會拋出錯誤。對象
checked { long b = 894156132165798; int a = Convert.ToInt16(b); }
5.返回值 default(T) 能夠返回任何類型的默認值。blog
return default(int?); return default(int);
6.二維數組 int[,] a=new int[3,4]; Console.WriteLine(a[1,1]);
交錯數組 int[][] a={new int[] {1,2},new int[] {3,4}};Console.WriteLine(a[1][1]);
7.數組擴充 Array.Resize(ref a,100); 將原有數組a中的內容複製到新數組中,而且新數組的長度爲100,而後將原有數組a指向新數組。
int[] a = new int[10];//數組a的長度爲10 Array.Resize(ref a, 100);//數組a的長度爲100
三。第三章
1.數值型數據兩個特殊值:Nan Not a Number(非數值) ,Infinty(無窮)
2.在多線程中使用i++,i--等自增自減,因爲該操做不是原子性操做,可能形成競爭資源。爲了防止該現象出現,可使用System.Threading.Interlocked.Increment(ref i);自增
或者System.Threading.Interlocked.Decrement(ref i);自減
int i = 10; System.Threading.Interlocked.Increment(ref i);//i=11 System.Threading.Interlocked.Decrement(ref i);//i=10
3. ??操做符 二元操做符號,當左邊的值爲null時候取右邊的值。 左邊的值必須是能夠爲null的,包括引用類型和可空類型。
int? a = null; int b= a ?? 18;
4.C#6.0新語法 ?. 判斷實例是否爲null,若是返回值爲值類型會返回值的可空類型。例如new Person() ?.age的值是0
5.位運算【!!!!未學明白!!!!】 ^(異或) ,&(同或),|(與非),~(按位取反), 掩碼,位映射
6.預處理
四。第四章
1.命名空間使用別名
using CountDownTimer=System.Timers.Timer;
2.可變參數 :
private static void xianshi(params string[] str) { foreach (var item in str) { Console.WriteLine(item); } }
參數帶params表示該函數是可變參數,可變參數必須是一位數組,能夠接受該類型的值和一維數組的值。且可變參數必須是參數列表最後一個參數(僅能夠一個)。
3.可選參數:在參數中能夠給參數賦初始值,當沒有輸入該參數的時候,將會使用默認值。
private static void GetList(string whereStr = "", string OrderStr = "", string Go = "") { Console.WriteLine(whereStr + OrderStr + Go); }
3.指定參數名調用
五。第五章 類
1。資源回收:GC會自動回收託管資源。 隱式肯定性資源清理 使用終結器 ;顯式肯定性資源 使用using(){};
2。自動屬性也能夠賦默認值。 public string Name{get;set;}="NoName";
3.C#6.0 :nameof(<變量>) 取變量名變成字符串,能夠防止當變量名改變後,忘記修改對應的字符串。 語法糖。
4.C#6.0 :支持只讀屬性的自動實現(賦默認值) 5.對象初始化器 :在已有Person類的狀況下: Person Ps=new Person(){Name="Liu",Age="11"}; 6.構造器鏈:構造函數1:public Employee(string firstName ,string lastName) {this.FirstName=firstName;this.LastName=lastName} 構造函數2:public Employee(int id,string firstName ,string lastName):this(firstName,lastName){this.ID=id}; 構造函數2使用了構造函數1的方法,造成構造鏈。 7.靜態構造函數:在類被首次訪問的時候執行。 8.靜態屬性:靜態字段可使用屬性實現。 9.靜態類:編譯器會自動標記爲abstract和saled ,因此不能夠繼承。 靜態類中實例方法是沒有意義的。 10.分部類:partial class Person{} ;分部類只容許在同一程序集中實現。分部類須要聲明方法才能夠調用,而且分部方法以前要加partial,分部方法只能返回void,且不容許使用out,可使用ref。