partial 关键字的用法: 把 partial 放在 class 、 struct 或 interface 关键字的前面。
partial class SampleClass
{
public void MethodOne(){}
}
partial class SampleClass
{
public void MethodTwo(){}
}
partial 关键字有什么作用呢?
如上代码示例,如果添加了 partial 关键字, 编译后等价于:
partial class SampleClass
{
public void MethodOne(){}
public void MethodTwo(){}
}
看到这里,它的作用,就明白了吧!我们再看一个复杂一点的例子:
[CustomAttribute]
partial class SampleClass : SampleBaseClass, ISampleClass
{
public void MethodOne(){}
}
[AnotherAttribute]
partial class SampleClass : IOtherSampleClass
{
public void MethodTwo(){}
}
// 编译后,等价于
[CustomAttribute]
[AnotherAttribute]
partial class SampleClass : SampleBaseClass, ISampleClass, IOtherSampleClass
{
public void MethodOne(){}
public void MethodTwo(){}
}
部分类可以包含部分方法。 如果生成的代码调用了不存在的方法,这就是非常有用的。扩展部分类的程序员可以决定创建部分方法的自定义实现代码, 或者什么也不做。 下面的代码片段包含一个部分类, 其方法 MethodOne 调用 APartialMethod 方法。 APartialMethod 方法用 partial 关键字声明。 因此不需要任何实现代码。 如果没有实现代码,编辑器将删除这个方法调用:
partial class SampleClass
{
public void MethodOne()
{
APartialMethod();
}
public partial void APartialMethod();
}
部分方法的实现可以放在部分类的任何其他地方, 如果下面的代码片段所示。 有了这个方法, 编译器就在 MethodOne 内创建代码, 调用这里声明的 APartialMethod:
partial class SampleClass : IOtherSampleClass
{
public void APartialMethod()
{
}
}
部分方法必须是 void 类型, 否则编译器在没有实现代码的情况下无法删除调用。
注意: 尽管 partial 关键字很容易创建跨多个文件的巨大的类, 且不同的开发人员处理同一个类的不同文件, 但该关键字并不用于这个目的。 在这种情况下,最好把大类拆分成几个小类, 一个类只用于一个目的。