1. 程式人生 > >C#關鍵字之Partial詳解

C#關鍵字之Partial詳解

Partial是區域性型別的標誌。區域性型別可以實現將一個類、結構或介面分成幾個部分,分別放在在幾個不同的.cs檔案中(當然也可以放在同一個.cs檔案中)。在程式進行編譯之後,將會合併成一個完整的類。因此區域性型別並沒有看起來那麼難以理解,使用partial只是讓類變得更容易管理,實際使用時和普通的類一樣。

  1. 適用範圍:
    (1)型別特別大,不適合放在一個檔案中實現。
    (2) 一個型別中的一部分程式碼為自動化工具生成的程式碼,不宜與我們自己編寫的程式碼混合在一起。(如設計模式中的“模板方法”。模板方法就是把所有相同功能都寫在父類中,需要有變化的方法在父類中寫成虛方法,然後在子類中重寫虛方法,因此模板方法利用partial實現了程式碼的利用。)
    (3)一個類同時需要多個人編寫。

  2. 注意事項:
    (1)只適用於類、介面、結構,不支援委託和列舉。
    (2)同一個型別的各個部分必須有修飾符partial。
    (3)使用區域性型別時,一個型別的各個部分必須位於相同的名稱空間中。
    (4)一個型別的各個部分必須同時被編譯。
    (5)partial只有和class、struct、interface放在一起時才表示區域性型別。
    (6)一個型別的各部分子類的訪問修飾符必須保證一致性。
    (7)若其中一個部分類使用了static/abstract/sealed修飾符,則整個類都是靜態類/抽象類/密封類。(後面會有static/abstract/sealed的詳解)。另外注意不能在一個部分類上使用static,在另一個部分類上使用abstract。
    (8)區域性型別的累加效應。
    a. 特性的累加效應。

[Attribute1, Attribute2("Hello")]
partial class Class1{}

[Attribute3, Attribute2("Exit")]
partial class Class1{}

相當於
[Attribute1, Attribute2("Hello"), Attribute3, Attribute2("Exit")]
class Class1 {}

注:Attribute2屬性允許在類上多次使用。
b. 介面的累加效應。
partial class Class2: Iinterface1, Iinterface2 {}
partial class
Class2: Iinterface3 {}
partial class Class2: Iinterface2 {} 相當於 class Class2: Iinterface1, Iinterface2, Iinterface3 {}