標籤:
再大的東西不去找,也就沒了,再小的知識不去記,也就忘了。今天來寫一寫C#中的部分型別和靜態工具類,這些兩個概念可能在我們的日常使用過程中都使用過,可能大家對這些內容覺得這些不是應該有的東西嘛,那就來複習一下吧。
部分型別,個人理解是對同一事物在兩個不同空間的描述,編譯器將組織我們編寫的在不同檔案中代碼,組合成一個完整的描述。我們不能在一個檔案中編寫成員的一半代碼,而把另外一半代碼放到另外一個檔案中,每個獨立的成員必須完整地位於所處的檔案中。如有一個Map類,成員屬性放在Map0.cs中,而成員方法放在Map1.cs中,注意使用partial關鍵字。
1 //Map0.cs 2 public partial class Map 3 { 4 public long Width { get; set; } 5 public long Height { get; set; } 6 } 7 //Map1.cs 8 public partial class Map 9 {10 public long GetSize()11 {12 return Width * Height;13 }14 }
還有一種常見的用法是當一個類要實現某一個介面同時繼承某一個類時,分別在不同檔案編寫各自的實現。現有一個新類Canvas,代碼如下
1 //Canvas0.cs 2 public partial class Canvas : IComparable 3 { 4 public int CompareTo(object obj) 5 { 6 return this.Price.CompareTo(((Canvas)obj).Price); 7 } 8 } 9 //Canvas1.cs10 public partial class Canvas : Map11 {12 public double Price { get; set; }13 }
由上可以看到在Canvas0.cs中是對IComparable介面的實現,而在Canvas1.cs中是對Map類的繼承,不同檔案分清了不同的功能。但我們在日常使用中,真心不用說要使用部分型別而去使用部分型別,不然檔案多了,自己也搞不明白了,應該是不要刻意吧。部分型別的作用往往在於我們在編寫自己的類時,後台幫我們產生一個使用partial的類,分清了代碼檔案的歸屬。
------------------------------------------------------------------------------------------------------
對於靜態工具類,所有程式都會有自己編寫的或者網上現有的工具類,常用如字串操作類,資料庫操作類等等。說下工具類的一些特點:
- 所有成員都是靜態(除了私人建構函式)
- 類直接從object中派生
- 不應該有狀態,除非涉及快取或單例
- 不能存在任何可見的建構函式
- 類是密封的
防止類派生,使用sealed關鍵字,添加一個私人建構函式防止建立執行個體,靜態方法使用static關鍵字,這是C#1中建立工具類的方法,下面看代碼,在C#後續版本中如何?。
1 public static class StringHelper2 {3 public static int GetLen(string str)4 {5 return str.Length;6 }7 }
C#編譯器知道類是一個靜態類,所以不用產生一個預設建構函式。下面來抄下課本,羅列下編譯器在類定義上執行的大量約束:
- 類不能聲明為abstract或sealed
- 類不能設定要實現的介面
- 類不能設定要繼承的基類
- 類不能包含任何非靜態成員,包括建構函式
- 類不能包含任何操作符
- 類不能包含任何protected或protected internal成員
請斧正。
13.C#部分型別和靜態類(七章7.1-7.2)