Partial

前言:Partial在C#的日常编码中应用非常广泛,本文通过三个方面来介绍它,分别是 WHAT(什么是Partial)WHY(为什么要用Partial)HOW(怎么用Partial)

  • WHAT 什么是Partial

           Partial:部分的、局部的、不完全的;

          C#中的Partial是C#2.0发布的特性,用来标记一个类是分部类,可以将类、结构、接口或方法的定义拆分为两个或多个源文件。每个源文件包含类型或方法定义的一个部分,并且在编译应用程序时将所有部分合并在一起。

  • WHY 为什么要用Partial

           在日常编码中,如果遇到一个项目的某一个功能的业务逻辑非常复杂,假设有六十多个属性、三十多个动作,我们编码的时候可以把所有的属性、动作定义在一个类中,但是这个类看上去可能过于冗长;我们也可以把这个功能拆分成若干个小功能去创建类,分别去实现其中的逻辑,调用的时候分别实例化去调用其中的方法,好像也不是很灵活;再比如多个程序员同步进行一个功能模块下的不同子模块,提交代码的时候可能就会冲突,然后需要去合并各自编写的代码,也不是很方便。鉴于这,C#2.0就新增了Partial特性。

          总结下Partial的优点:

    • 处理大型项目时,使一个类分布于多个独立文件中可以让多位程序员同时对该类进行处理(相当于支持并行处理,很实用)团队协作时,一个类可以让其他人修改,但某些部分不希望其他人修改时
    • 一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起
    • 一个类按照功能需求区分开,比如一部分功能是用于与外部对接的,一部分是具体的实现方法(把public的内容和private内容分开)
    • 把一个类中经常维护的内容提取出来,不维护的放到另一块地方
    • 为了美观性
    • 架构设计的时候提升可阅读性
  • HOW 怎么用Partial

          Partial的使用比较简单:  用于标记类、接口、结构或方法的返回类型 eg : public partial class 类名;

    •  示例一:修饰类
using System;
using System.Collections.Generic;
using System.Text;

namespace Tools.Learn.Partial
{
    /// <summary>
    /// 定义一个局部类
    /// </summary>
    public partial class LearnPartial
    {
       
    }
}

             不同文件中定义分部类:截图如下

             

               分部类中定义各自的方法:   

               

                     然后调用:

                   

                    可以看到调用的时候写在不同文件中的同一个分部类的方法都可以调到

    • 示例二:修 饰接口
using System;
using System.Collections.Generic;
using System.Text;

namespace Tools.Learn.Partial
{
    /// <summary>
    /// 定义一个分部接口
    /// </summary>
    public partial interface ILearnPartialcs
    {
    }
}
  • 使用Partial注意事项:
    •  "partial"修饰符后面只能紧跟“class”、“record”、“interface”、“struct” 或方法返回类型
    • 关键字“partial ”是一个上下文关键字,只有和 class、struct、interface 放在一起时才有关键字的含义,因此 partial 的引入不会影响现有代码中名称为partial的变量。
    • 局部类型的各个部分一般是分开放在几个不同的 *.cs 文件中,但 C# 编译器允许我们将他们放在同一文件中
    • 所有部分都必须使用partial 关键字
    • 各个部分必须具有相同的可访问性,如public、private 等
    •  如果一个类型有一个部分使用了abstract修饰符,那么整个类都将被视为抽象类;
    •  如果一个类型有一个部分使用了 sealed 修饰符,那么整个类都将被视为密封类;
    • 一个类的各个部分不能使用相互矛盾的修饰符,比如不能在一个部分上使用abstract,又在另一个部分上使用sealed。
    • 一个类型的各个部分上指定的基类必须一致,某个部分可以不指定基类,但如果指定,则必须相同。
    • 局部类型上的接口具有“累加”效应如:
partial class Class1: Iinterface1, Iinterface2 {}
partial class Class1: Iinterface3 {}
partial class Class1: Iinterface2 {}

相当于:

class Class1: Iinterface1, Iinterface2, Iinterface3 {}
  • Partial和继承
  • Partial其实就是把一个类中的属性方法定义在不同的文件中,编译的时候会合成一个类,实质就是一个类,>=1个代码文件
    继承也可以将两个类的属性和方法编译到一个类中,实质就是两个类,两个代码文件;
    Partial的应用更加灵活简洁,各个分部文件中可以相互调用,水平关系;继承的话就有一个子类父类的垂直关系

参考博客:https://www.cnblogs.com/qtiger/p/11177036.html

官网地址:部分类和方法 - C# 编程指南|微软文档 (microsoft.com)

 

posted @ 2021-09-24 09:39  #疆先绅#  阅读(548)  评论(0编辑  收藏  举报