把所有的原始碼作為一個類型儲存在一個單獨的檔案裡是一個好的編程習慣,但有時候一個類型變得過於龐大以至於這樣做成為一個不切實際的約束。此外,編程人員經常使用原始碼產生器來產生一個應用程式的初始結構,然後再修改產生的代碼。不幸的是,當原始碼在將來某個時候再次發布時,已存在的修改就要被覆蓋了。
Partial types允許把類,結構和介面打破為多個代碼片段存在不同的原始碼檔案,以便於簡化開發和維護。加之partial types允許機器產生的和使用者編寫的類型部分分離,這樣就可以方便增加工具產生的代碼。
Partial,是一個新的類型修飾符,在把一個類型定義在多個部分的時候使用。下面是一個partial class的樣本,以兩個部分實現。這兩個部分可能在兩個不同的原始碼檔案,比如說第一個部分是由一個資料庫映射工具產生的,而第二個部分是手工編寫的。
public partial class Customer
{
private int id;
private string name;
private string address;
private List<Order> orders;
public Customer() {
}
}
public partial class Customer
{
public void SubmitOrder(Order order) {
orders.Add(order);
}
public bool HasOutstandingOrders() {
return orders.Count > 0;
}
}
當上面的兩個部分在一起編譯,結果產生的代碼就好像這個類是寫在一個單元裡一樣。
public class Customer
{
private int id;
private string name;
private string address;
private List<Order> orders;
public Customer() {
}
public void SubmitOrder(Order order) {
orders.Add(order);
}
public bool HasOutstandingOrders() {
return orders.Count > 0;
}
}
一個partial type的所有部分必須在一起編譯,這樣所有的部分才能在編譯的時候整合在一起。特別的是partial types不允許加入已經編譯好的類型。