1、部分类:
部分类即把类的定义放在多个文件中,如将字段、属性和构造函数放在一个文件中,而把方法放在另一个文件中。
为此,只需在包含部分类定义的每个文件中对类使用partial关键字即可。如下:
public partial class MyClass
{
……
}
应用于部分类的接口也会应用于整个类,如下:
public partial class MyClass : IMyInterface1
{
……
}
public partial class MyClass : IMyInterface2
{
……
}
等价于:
public partial class MyClass : IMyInterface1 , IMyInterface2
{
……
}
部分类可以在一个部分类定义文件或者多个部分类定义文件中包含基类,但如果基类在多个定义文件中指定,它就必须是同一个基类,因为在C#中是单继承机制。
2、部分方法:
部分方法的限制:
部分类中可以定义部分方法(部分方法必须在部分类中定义)。
部分方法在一个部分类中定义(没有方法体),在另一个部分类中实现。在这两个部分类中,部分方法都要 使用partial关键字。
部分方法可以是静态的,但他们总是私有的,且返回类型只能是void。参数不能是out参数,但可以是ref参数。
部分方法不能使用virtual,abstract,override,new,sealed和extern修饰符。
部分方法的优势:
部分方法的优势体现在编译代码时,而不是使用代码时。
在定制自动生成的代码或设计器创建的代码时,部分方法是很有用的。
设计器会声明部分方法,用户根据具体需要选择是否实现它。如果不实现它就不会影响性能,因为在编译过的代码中并不存在该方法。
PS:
实际上,编译代码时,如果代码包含一个没有实现代码(partial void DoSomeThing();)的部分方法,编译器会完全删除该方法,还会删除对该方法的所有调用。
执行代码时不会检查实现代码,因为没有要检查的方法调用。这会略微提高性能。
为什么部分方法的返回类型必须为void?
答:因为只用返回类型为void,方法才能没有方法体,否则至少要有一个返回值,这样就一定有实现代码,使部分方法的优势荡然无存。(个人见解)