如果您在開發項目的公用函數庫,用于公用函數庫的內容越豐富越好,但這不可能一下子就寫好,需要一點一點的積累,這時就可以使用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: Iinterface1, Iinterface2, Iinterface3 {}
四、局部類型的應用特性
在局部類型上的特性具有“累加”效應。
[Attribute1, Attribute2("Hello")]partial class Class1{}
[Attribute3, Attribute2("Exit")]partial class Class1{}
相當于[Attribute1, Attribute2("Hello"), Attribute3, Attribute2("Exit")]class Class1 {}
注:Attribute2屬性允許在類上多次使用。
五、局部類型的限制
1、要作為同一類型的各個部分的所有分部類型定義都必須使用partial 進行修飾。如下所示:
public partial class A { }
public class A { } // Error, must also be marked partial
2、partial 修飾符只能出現在緊靠關鍵字class、struct 或interface前面的位置(枚舉或其它類型都不能使用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類,并調用類中的方法。
C# 代碼復制//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 ";
}
}
新聞熱點
疑難解答