在C# 1.x中,要求類中所有的代碼必須集中在一起,放在一個資料夾中。雖然這種在一個檔案中維護一個類的所有代碼,是一項比較好的編程要求,但是在某些情況下,例如,類變得很複雜,代碼很冗長,這種編程要求就成為了一個不切實際的約束。另外,開發人員經常使用代碼生成器來生成一個應用程式的初始結構,然後修改產生的代碼。不幸的是,當以後需要再次發布原始碼的時候,現存的修正會被重寫。
為了解決以上的問題,C# 2.0中提供了一種新的技術特性——局部類。局部類允許類、結構和接口被分成多個小塊兒並存儲在不同的源檔案中,這樣的實現很容易開發和維護。另外,局部類可以分離代碼生成器產生的代碼和開發人員書寫的代碼,這使得利用工具來加強產生的代碼變得容易。實現局部類,即在多個部分中定義一個類時,必須使用新的partial關鍵字來標註分割,這樣可以將局部類的一部分放在一個源檔案中,而將局部類的另一部分放在不同的源檔案中。
在下面的示例中,一個局部類的實現代碼被分成兩個部分,放置在兩個不同的源檔案中。另外,代碼的第一部分是由代碼產生器生產的,而第二部分是開發人員手工編寫的。
第一部分代碼如下所示:
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;
}
}
第一部分代碼由代碼生成器創建,主要包括的是程式代碼的結構。第二部分代碼是開發人員手工編寫,主要是一些業務邏輯的實現。由於二者都使用partial關鍵字和類名Customer,因此,兩部分都稱為局部類Customer。這種實現方法在保證代碼結構的同時,使得代碼更加清晰和易於維護。