C#學習筆記3。本站提示廣大學習愛好者:(C#學習筆記3)文章只能為提供參考,不一定能成為您想要的結果。以下是C#學習筆記3正文
1.雖然並不是必需的,但普通建議將每個類都放到它自己的文件中,用類名對文件停止命名,這樣一來,就可以更容易地尋覓定義了一個特定類的代碼。
2.假如不為類成員添加訪問修怖符,那麼黠認運用的是private,也就是說成員默許為公有成員。
3.不論為公有字段運用哪一種命名形式(_FirstName、_firstName、m_firstName(延續子C++的命名標准,m表示 member variable)、firstName),都要根據Pascal大小寫標准來命名公共字段和屬性。因而,公共屬性應該運用FirstName方式的稱號,相似地,假設沒有圍繞一個公共字段來創立封裝它的一個屬性,就應該為該字段運用Pascal大小寫標准。
4.在C#2.0的一個屬性的完成中,可以為get或許set局部指定訪問修飾符(但不能為兩者同時指定訪問修怖符),從而掩蓋為屬性聲明指定的訪問修飾符。為get或set指定訪問修飾符時,留意這個訪問修飾符的“限制性”必需比使用於整個屬性的訪問修飾符更“嚴厲”,例如,將屬性聲明為較嚴厲的 private,但將它的set聲明為較寬松的public,就會發作編譯錯誤。
5.對象初始化器只是一項語法上的改良,最終生成 ClL 代碼和用獨自的語句對字段或屬性停止賦值無異,在c#言語中,成員初始化器的順序,決議了在 ClL 代碼的結構器調用之後的語句中,對屬性和字段停止賦值的順序。同理集合初始化器也會在IL中生成add()來添加元素。
6.終結器:C#提供了終結器 (finalizer) 結構,與 C++的析構器 (destructor ) 不同,終結器不是在對一個對象的一切援用都消逝之後就馬上運轉,相反終結器是在一個對象最後一次活動之後,並在順序終止之前執行。詳細地說垃統回收器回在-次渣滓回收進程中辨認出帶有終結器的對象,之後它並不是立刻回收這些對象,而是將它們添加到一個終結隊列中,一個獨立的線程遍歷終結隊同中的每個對象,調用它們的終結器,鼎後把它們從隊列中刪除,使它們再次可供渣滓回收器運用。
7.結構器鏈:在同一個類中{針對同一個對象實倒),從一個結構據中調用另一個結構囂,C#采取的語法格式是在個冒號前面添如this關鍵字,再添加與披調用結構器對應的一個參數列表。以防止輸出反復的代碼,這稱為結構器鏈(constructor chaining),它是用結構器初始化器來完成的,結構器初始化器會在執行以後結構器的完成之前,判別要調用另外哪一個結構器。
8.匿名類型:它們是由編譯器靜態生成的數據類型,而不是經過顯式的類定義來聲明的。運用new{屬性=,屬性=,值}(假如所賦的值是一個屬性或字段,那麼在沒有明白指定稱號的前提下,會黠認運用字段或屬性的稱號),編譯器遇到匿名類型的語法時,就會自動生成一個CIL類,該類具有與匿名類型聲明中的命名值和量據類型對應的屬性,雖然C#沒無為這個自動生成的類型提供一個名揮,但它依然是靜態類型的。除非運用Lambda表達式和查詢表達式關聯來自不同類型的數據,或許對數據停止程度投射,否則普通狀況下還是應該盡量防止運用匿名類型。
9.靜態類的一個特證在於,C#編譯器會自動在 CIL代碼中把它標志為 abstract 和 sealed 這會將類指定為不可擴展。
10.靜態結構器:靜態結構器用來對類(而不是類實例)停止初始化,靜態結構器不是顯式調用的,相反“運轉時”會在初次訪問類時自動調用靜態結構器,所謂“初次訪問類”能夠是調用一個普通實例結構器,也能夠是由問類的一個靜態辦法或屬性,我們運用靜態結構器將類中的靜態數據初始化成一個特定的值,尤其是在無法經過在聲明時的一次復雜的賦值來取得初始化值的時分。假設一個靜態字段的賦值,既在靜態結構器中停止,又在聲明時停止,那麼現在始化完畢的時分,最終取得的是什麼值呢?
答案是靜態初始化的賦值優先於聲明字段時的賦值,由於在C#編譯器生成的IL碼時,靜態聲明時的賦值挪動到了靜態結構器的第一句。同理實例字段的狀況也是一樣的。
11.常量const:常量字段自動成為靜態字段,由於不需求為每個對象實例都生成一個新的字段實例,但是假設將一個常量字段顯式地聲明為 static,會形成一個編譯錯誤。
12.嵌套類:在某個類對內部沒有運用、或特別意義,只對以後的類有意義,可以聲明為嵌套類,嵌套類可是用private修飾。嵌套類中的this成員指的是嵌套類的一個實例,而不是容納類,嵌套類要想訪問容納類的實例,一個方法是顯示傳遞容納類的實例,比方經過一個結構器或這辦法參數。嵌套類的另一個風趣的特點是它可以訪問容納類的任何成員,其中包括公有成員。但反之則不然,容納類不能夠訪問嵌套類的公有成員。要警覺public嵌套類,它們意味著不良的編碼作風。
13.局部類與局部辦法:局部類(partial calss)次要用於代碼消費工具停止固定格式代碼生成,局部類的聲明可以把多個局部類放在多個文件中(必需在同一個順序集中),編譯器會自動兼並。
C#3.0新增了局部辦法(partial methods)特性,局部辦法只能存在於局部類中,且無前往值,和局部類類似,其次要是為代碼的生成提供方便。局部辦法允許聲明一個辦法而不需求一個完成,但是假如包括了可選的完成,這個完成就可以放到某個姊妹局部類定義中。由於在生成的局部類代碼中,生成工具不能提供詳細辦法完成邏輯,若以局部辦法的方式提供一個鉤子(占位),詳細完成可由開發者完成,若局部辦法沒有在另一個局部類中完成,IL中不會呈現局部辦法的任何蹤跡。如在Person類中展現了局部辦法與局部類的細節。
//Person.Designer.cs文件 public partial class Person { #region partial void OnLastNameChanging(string value); partial void OnFirstNameChanging(string value); #endregion public Guid Id { get; set; } private string _LastName; public string LastName { get { return _LastName; } set { if (_LastName != value) { OnLastNameChanging(value); _LastName = value; } } } private string _FirstName; public string FirstName { get { return _FirstName; } set { if (_FirstName != value) { OnFirstNameChanging(value); _FirstName = value; } } } } //Person cs文件 public partial class Person { partial void OnLastNameChanging(string value) { if (string.IsNullOrWhiteSpace(value)) { throw new ArgumentException("LastName"); } } partial void OnFirstNameChanging(string value) { if (string.IsNullOrWhiteSpace(value)) { throw new ArgumentException("FirstName"); } } }
-------------------------以上內容依據《C#實質論 第三版》停止整理