内容摘要 -
虽然在单个文件中维护某个类型的所有源代码是个很好的编程习惯,但是有时一个类型会变得非常大,
在这种情况下,这种做法反而成为了一种不切实际的限制。此外,程序员经常使用源代码生成器产生应
用程序的初始结构,然后修改结果代码。遗憾的是,当将来某个时候再次发出源代码时,现有修改将被
改写。
分部类型 (Partial type) 允许将类、结构和接口划分为多个部分,存储在不同的源文件中,以便于开发和
维护。此外,分部类型允许将计算机生成的类型部分和用户编写的类型部分互相分开,以便更容易地扩
充工具生成的代码。
当通过多个部分来定义类型时,将使用新增的类型修饰符 partial。下面是一个分为两部分来实现的分
部类示例。这里,第一部分是通过数据库映射工具由计算机生成的,而第二部分是手动编写的,所以,
可将这两个部分分别存储在不同的源文件中:
全文 -
C# 2.0语言规范讲义 - 分部类型
虽然在单个文件中维护某个类型的所有源代码是个很好的编程习惯,但是有时一个类型会变得非常大,
在这种情况下,这种做法反而成为了一种不切实际的限制。此外,程序员经常使用源代码生成器产生应
用程序的初始结构,然后修改结果代码。遗憾的是,当将来某个时候再次发出源代码时,现有修改将被
改写。
分部类型 (Partial type) 允许将类、结构和接口划分为多个部分,存储在不同的源文件中,以便于开发和
维护。此外,分部类型允许将计算机生成的类型部分和用户编写的类型部分互相分开,以便更容易地扩
充工具生成的代码。
当通过多个部分来定义类型时,将使用新增的类型修饰符 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;
}
}
当将上述两个部分一起编译时,结果代码与将该类编写为单个单元时相同:
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;
}
}
分部类型的所有部分必须一起编译,以使这些部分可在编译时被合并。特别指出的是,分部类型不允许
对已经编译的类型进行扩展。
|