Loading

在WPF/C#中使用分布类对VM进行拆分

摘要

C#的分部关键字(partial)能够拆分一个类、一个结构、一个接口或一个方法为两个或更多个的文件,分部的每个文件都可以包含自己的类型和方法,程序编译时会将同类的分部内容合并为一个。

关于分布类

partial这个关键词可能大家都见过,但未必经常去使用,比如XAML的后台代码就是用到了分布类,WPF框架、Prism框架等均有广泛使用分布类。

image-20221226225029892

分布类的功能说明

序号 分布类功能说明
1 分部类必须使用关键字【partial】修饰,且必须在【class】前
2 各个分部类都必须具有相同的访问性
3 如果任意分部类声明为抽象(密封),则整个类都被视为抽象(密封)
4 如果任意分部类继承父类,则整个类都继承父类
5 在任意分部类声明的属性、结构、接口都可以让其他分部类使用
6 各个分部类可以指定不同的接口,最终类将实现所有分部类的所有接口

分布类的使用场景

序号 分布类的使用场景
1 使用自动生成的源文件时,自动创建的源文件为一个内容,而对应的逻辑处理业务为一个内容,互不干扰,两个文件的内容可以相互调用
2 开发大型项目时,需要多个程序员编写同一个类中的不同功能模块,此时就可以使用分部关键字(partial)各自创建相同类不同名称的文件编辑自己的功能模块,互不干扰
3 需要对源生成器的类添加扩展功能且不能修改原生成器类,可以使用分部类实现

示例代码

关于分布类官方并没有给出多余的解释,简单来说就是可以使某一个类拆分成多个类来维护,较适合多人协作开发或某一个类代码量过多从而进行划分以便于后续维护,官方文档:分部类型(C# 参考)

这里假设有一个动物视图模型,业务中有猫有狗(假设按业务划分(动物类别)),创建一个猫咪类文件,然后将其命名空间改为和主类同名并在其访问类型(public)后加上partial 关键字,例如下面这样:

image-20221226230458013

其它类同理,即创建一个新的类文件,类名改为和主类同名,加上分布关键字即可。

除了分布类,还有分布方法,都是加上partial关键字进行修饰

Tips:声明的分布方法,只能有一个实现,即一个分布方法签名对应一个实现。其实这也不奇怪,本质上在编译时会将分布类的多个文件合并为一个。

image-20221226230032308

在实际开发中,往往会有一些属性,Command等,你可以按照某种约定将其分布定义在多个分布类中,然后公开一个初始化方法或入口,让主类统一初始化即可。

关于分布类的使用,建议多参考开源代码,若有什么好的思路,也可以分享在评论区,互相学习!

posted @ 2022-12-26 23:11  傲慢与偏见luc  阅读(406)  评论(0编辑  收藏  举报