日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#学习笔记3

發布時間:2023/12/20 C# 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 {#regionpartial void OnLastNameChanging(string value);partial void OnFirstNameChanging(string value);#endregionpublic 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#本質論 第三版》進行整理

轉載于:https://www.cnblogs.com/zwt-blog/p/6297084.html

總結

以上是生活随笔為你收集整理的C#学习笔记3的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。