分部 (Visual Basic)
指示一个类或结构声明是此类或结构的分部定义。
可以使用 Partial 关键字在多个声明中分割类或结构的定义。 可以根据需要在任意多个不同的源文件中使用任意数量的分部声明。 但所有声明必须位于同一程序集和命名空间中。
备注
Visual Basic 支持分部方法,这通常在分部类中实现。有关更多信息,请参见分部方法 (Visual Basic)和 Sub 语句 (Visual Basic)。
[ <attrlist> ] [ accessmodifier ] [ Shadows ] [ MustInherit | NotInheritable ] _
Partial { Class | Structure } name [ (Of typelist) ]
[ Inherits classname ]
[ Implements interfacenames ]
[ variabledeclarations ]
[ proceduredeclarations ]
{ End Class | End Structure }
部件
术语 |
定义 |
attrlist |
可选。 应用于此类或结构的特性列表。 必须将 特性列表 (Visual Basic) 包括在尖括号 (< >) 中。 |
accessmodifier |
可选。 指定可以访问此类或结构的代码。 请参见 Visual Basic 中的访问级别。 |
Shadows |
可选。 请参见 Shadows (Visual Basic)。 |
MustInherit |
可选。 请参见 MustInherit (Visual Basic)。 |
NotInheritable |
可选。 请参见 NotInheritable (Visual Basic)。 |
name |
必选。 此类或结构的名称。 必须与在相同类或结构的所有其他分部声明中定义的名称匹配。 |
Of |
可选。 指定这是一个泛型类还是泛型结构。 请参见 Visual Basic 中的泛型类型 (Visual Basic)。 |
typelist |
如果使用 Of,则是必选的。 请参见 类型列表 (Visual Basic)。 |
Inherits |
可选。 请参见 Inherits 语句。 |
classname |
如果使用 Inherits,则是必需的。 派生此类的类或接口的名称。 |
Implements |
可选。 请参见 Implements 语句。 |
interfacenames |
如果使用 Implements,则是必选的。 由此类或结构实现的接口名称。 |
variabledeclarations |
可选。 声明类或结构的附加变量和事件的语句。 |
proceduredeclarations |
可选。 声明和定义类或结构的附加过程的语句。 |
End Class 或 End Structure |
结束分部 Class 或 Structure 的定义。 |
备注
Visual Basic 使用分部类定义,在各个源文件中将生成的代码与用户编写的代码分隔开来。 例如,**“Windows 窗体设计器”**为控件定义的分部类,如 Form。 不应修改在这些控件中生成的代码。
创建分部类或结构时适用创建类和结构的所有规则,如修饰符的使用和继承规则。
最佳做法
正常情况下,不应将单个类或结构的开发拆分到两个或多个声明中。 因此,大多数情况下都不需要 Partial 关键字。
为了提高可读性,类或结构的每个分部声明都应包含 Partial 关键字。 编译器最多允许一个分部声明省略此关键字;如果两个或多个分部声明都省略此关键字,编译器将指示出错。
行为
**声明联合。**编译器将类或结构视为其所有分部声明的联合。 来自每个分部定义的每个修饰符都应用于整个类或结构,而且来自每个分部定义的每个成员也可在整个类或结构中使用。
**模块中的分部类型不允许类型提升。**如果分部定义位于模块内部,该类或结构的类型提升将自动被阻止。 在这种情形下,一组分部定义可能导致意外的结果甚至编译器错误。 有关更多信息,请参见 类型提升 (Visual Basic)。
只有在两个分部定义的完全限定路径相同时,编译器才会对这两个分部定义进行合并。
Partial 关键字可用于下面的上下文中:
示例
下面的示例将类 sampleClass 的定义拆分到两个声明中,分别定义一个不同的 Sub 过程。
Partial Public Class sampleClass
Public Sub sub1()
End Sub
End Class
Partial Public Class sampleClass
Public Sub sub2()
End Sub
End Class
上面的示例中的两个分部定义可位于同一源文件或位于两个不同的源文件中。