首页 > 编程语言 >在WPF/C#中使用分布类对VM进行拆分

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

时间:2022-12-26 23:23:32浏览次数:59  
标签:部类 partial C# VM 关键字 分布 使用 WPF 一个

摘要

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等,你可以按照某种约定将其分布定义在多个分布类中,然后公开一个初始化方法或入口,让主类统一初始化即可。

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

标签:部类,partial,C#,VM,关键字,分布,使用,WPF,一个
From: https://www.cnblogs.com/chonglu/p/17007119.html

相关文章

  • 关于c++中读入输出方式的重定向
    今天氵数据结构实验的时候发现了关于cpp文件和控制台输入输出重定向的问题。题目要求先从文件读入,然后再从控制台读入,再从控制台输出,最后输出到文件。本来想的是用freope......
  • macOS下vscode配置c++万能头文件
    vscode正常情况下是不能使用c++的万能头文件#include<bits/stdc++.h>,那么这会给我们算法刷题带来一定的不便,以下是配置教程,具体可以参考该博文:macOS下使用bits/stdc++.h万......
  • 自己动手,编写神经网络程序,解决Mnist问题,并网络化部署-6CBIR模拟问题
    一、CBIR技术简介传统的图像检索过程,先通过人工对图像进行文字标注,再利用关键字来检索图像,这种依据图像描述的字符匹配程度提供检索结果的方法,简称“以字找图”,既耗......
  • 基础_cifar10_model
    今天进一步在cifar10数据集上解决几个问题:1、比较一下序贯和model,为什么要分成两块;2、同样的条件下,我去比较一下序贯和model。这个例子作为今天的晚间运行。1、比较一......
  • AnswerOpenCV一周佳作欣赏(0615-0622)
    i'musingOpenCVforAndroid.Iwouldliketoknow,howtomakeimagecorrection(autoadjustmentsofbrightness/contrast)forimage(bitmap)inandroidviaOpenCV......
  • 尝试解决cifar10问题
    注意事项:1、我要用kaggle的数据集,而不是用其它的数据集;2、最终得到的结果要以test为导向;1、先打开jupyter,并且把数据集传到dl_machine上去。想办......
  • answerOpenCV轮廓类问题解析
    contour在opencv中是一个基础的数据结构,灵活运用的话,作用很大。以contour为关键字,在answerOpenCV中能够发现很多有趣的东西。 1、无法解决的问题​​......
  • 《学习OpenCV3》第14章课后习题
    1、在一条含有N个点的封闭轮廓中,我们可以通过比较每个点与其它点的距离,找出最外层的点。(这个翻译有问题,而且这个问题是实际问题)a、这样一个算法的复杂度是多少?b......
  • 为基于OpenCV的图像处理程序编写界面—关于QT\MFC\CSharp的选择以及GOCW的介绍
        基于OpenCV编写图像处理项目,除了算法以外,比较重要一个问题就是界面设计问题。对于c++语系的程序员来说,一般来说有QT/MFC两种考虑。QT的确功能强大,特别是QML......
  • 基于pybind11实现Python调用c++编写的CV算法--上(Windows+VS)
    C++是一种编译型(compiled)语言,设计重点是性能、效率和使用灵活性,偏向于系统编程、嵌入式、资源受限的软件和系统。Python是一种解释型(interpreted)语言,同样也支持不同的......