如果您在開發專案的公用函數庫,用於公用函數庫的內容越豐富越好,但這不可能一下子就寫好,需要一點一點的積累,這時就可以使用Partial Class,每隔一段時間將你新開發的Partial Class類別的程式上傳到伺服器上或特定的目錄下;而不需要將新的程式碼複製貼上到原先的程式碼中,減少不必要的麻煩。
Partial類型是一個純語言層的編譯處理,不影響任何執行機制-事實上C#編譯器在編譯的時候仍會將各個部分的局部型別合併成一個完整的類別。
一、什麼情況下使用分部類別?
(1) 類型特別大,不宜放在一個文件中實現。
(2) 一個類型中的一部分程式碼為自動化工具產生的程式碼,不宜與我們自己寫的程式碼混合在一起。
(3) 需要多人合作寫一個類別。
二、Partial類型上的修飾符
(1) 一個類型的各個部分上的訪問修飾符必須維持一致性。
(2) 如果一個類型有一個部分使用了abstract修飾符,那麼整個類別都將被視為抽象類別。
(3) 如果一個類型有一個部分使用了 sealed 修飾符,那麼整個類別都將被視為密封類別。
(4) 一個類別的各個部分不能使用相互矛盾的修飾符,比如不能在一個部分上使用abstract,又在另一個部分上使用sealed。
三、Partial類型的基類和介面
(1) 一個類型的各個部分上指定的基類必須一致。某個部分可以不指定基類,但如果指定,則必須相同。
(2) Partial類型上的介面具有「累加」效應。
partial class Class2: Iinterface1, Iinterface2 {}
partial class Class2: Iinterface3 {}
partial class Class2: Iinterface2 {}
相當於
class Class2: Iinterface, Iinterface2, Iinterface2;應用特性
在局部類型上的特性具有「累加」效應。
[Attribute1, Attribute2("Hello")]
), Attribute3, Attribute2("Exit")]
class Class1 {}
五、局部類型的限制
public class A { } // Error, must also be marked partial
2、partial 修飾符只能出現在緊靠前面的關鍵字class位置(枚舉或其它類型都不能使用partial);
3、要成為同一類型的各個部分的所有分部類型定義都必須在同一組件和同一模組(.exe 或.dll 檔案)中進行定義。分部定義不能跨越多個模組;
4、類別名稱和泛型類型參數在所有的分部類型定義中都必須符合。泛型類型可以是分部的。每個分部聲明都必須以相同的順序使用相同的參數名稱。
5、局部型別只適用於類別、介面、結構,不支援委託和枚舉。
6、一個類型的各個部分必須同時編譯。
六、使用Partial需要注意以下一些情況 1.使用partial 關鍵字表明可在命名空間內定義該類、結構或接口的其他部分2.所有部分都必須使用partial關鍵字
3.各個部分必須具有相同的可訪問性,如public、private 等
4.如果將任意部分聲明為抽象的,則整個類型都被視為抽象的
5.如果將任意部分聲明為密封的,則整個類型都被視為密封的
6.如果任意部分聲明繼承基類時,則整個類型都將繼承該類
7.各個部分可以指定不同的基接口,最終類型將實現所有分部聲明所列出的全部介面
8.在某一分部定義中聲明的任何類別、結構或介面成員可供所有其他部分使用
9.嵌套類型可以是分部的,即使它們所嵌套於的類型本身並不是分部的也如此。
七、Partial實例將Example類別定義為Partial Class,將該類別的三個方法m1、m2、m3分別定義在Example1。 cs、Example2。 cs、Example3。 cs三個類別檔案中,然後在PartialClass.aspx。 cs中實例化Example類,並呼叫類別中的方法。
//Example1.cs public partial class Example { public string m1() { return "Method 1 "; } } //Example2.cs public partial class Example { public string m2() { return "Method 2 "; } } //Example3.cs public partial class Example { public string m3() { return "Method 3 "; } }