1. 什么是局部类型?

C# 2.0 引入了局部类型的概念。局部类型允许我们将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中。

局部类型适用于以下情况:

(1) 类型特别大,不宜放在一个文件中实现。
(2) 一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起。
(3) 需要多人合作编写一个类。

局部类型是一个纯语言层的编译处理,不影响任何执行机制——事实上C#编译器在编译的时候仍会将各个部分的局部类型合并成一个完整的类。

   public partial class Program
   {
     static void Main(string[] args)
     {
     }
   }

partial class Program
   {
     public void Test()
     {
     }
   }

2. 局部类型的限制

(1) 局部类型只适用于类、接口、结构,不支持委托和枚举。
(2) 同一个类型的各个部分必须都有修饰符 partial。
(3) 使用局部类型时,一个类型的各个部分必须位于相同的命名空间中。
(4) 一个类型的各个部分必须被同时编译。

3. 局部类型的注意点

(1) 关键字partial是一个上下文关键字,只有和 class、struct、interface 放在一起时才有关键字的含义。因此partial的引入不会影响现有代码中名称为partial的变量。
(2) 局部类型的各个部分一般是分开放在几个不同的.cs文件中,但C#编译器允许我们将他们放在同一文件中。

4. 局部类型的应用特性

在局部类型上的特性具有“累加”效应。

[Attribute1, Attribute2("Hello")]
partial class Class1{}

[Attribute3, Attribute2("Exit")]
partial class Class1{}

相当于

[Attribute1, Attribute2("Hello"), Attribute3, Attribute2("Exit")]
class Class1 {}

注:Attribute2属性允许在类上多次使用。

5. 局部类型上的修饰符

(1) 一个类型的各个部分上的访问修饰符必须维持一致性。
(2) 如果一个类型有一个部分使用了abstract修饰符,那么整个类都将被视为抽象类。
(3) 如果一个类型有一个部分使用了 sealed 修饰符,那么整个类都将被视为密封类。
(4) 一个类的各个部分不能使用相互矛盾的修饰符,比如不能在一个部分上使用abstract,又在另一个部分上使用sealed。

6. 局部类型的基类和接口

(1) 一个类型的各个部分上指定的基类必须一致。某个部分可以不指定基类,但如果指定,则必须相同。
(2) 局部类型上的接口具有“累加”效应。

partial class Class2: Iinterface1, Iinterface2 {}
partial class Class2: Iinterface3 {}
partial class Class2: Iinterface2 {}

相当于

class Class2: Iinterface1, Iinterface2, Iinterface3 {}

首先,我们建立一个类Test1,这个类中定义了一个变量 i

public partial class Test1
{
    public int i = 0 ;

public Test1()
     {
        //
         // TODO: 在此处添加构造函数逻辑
         //
     }
}

我们再建立一个类 Test1 ,其中没有申明变量,但是我们这里还是使用 了Test类中的变量 i

public partial class Test1
{
    public Test1(int x)
     {
        //
         // TODO: 在此处添加构造函数逻辑
         //

i = x;
     }
}

这两个类的作用相当于

public class Test1
{
    public int i ;
   
    public Test1()
    {
       // default construct
     }

    public Test1(int x)
    {
         i=x;
     }

}

关键字partial的作用就是把在同一个命名空间中的两个相同类合并起来

partial 的用法相关推荐

  1. C# partial的用法

    ** C# partial的用法 ** (一)什么情况下使用分部类? –处理大型项目时,使一个类分布于多个独立文件中可以让多位程序员同时对该类进行处理(相当于支持并行处理,很实用): –使用自动生成的 ...

  2. MVC之Partial View 用法

    Partial View 顾名思义就是Html代码片段,因此可以用Partial View 把部分的Html或显示逻辑包装起来,方便多次使用. Partial View 需要放在Views/Share ...

  3. TypeScript里的工具类型Partial的用法

    在SAP Spartacus的源代码里我们可以观察到很多Partial的使用场景: Partial 可以快速把某个接口类型中定义的属性变成可选的(Optional): interface People ...

  4. MVC 之 Partial View 用法

    Partial View 顾名思义就是Html代码片段,因此可以用Partial View 把部分的Html或显示逻辑包装起来,方便多次使用. Partial View 需要放在Views/Share ...

  5. python中partial库用法详解

    源码解释: class partial:"""New function with partial application of the given argumentsan ...

  6. Python中的partial便函数的理解

    偏函数(Partial function)是通过将一个函数的部分参数预先绑定为某些值,从而得到一个新的具有较少可变参数的函数.在Python中,可以通过functools中的partial高阶函数来实 ...

  7. python之使用functools.partial

    文章目录 `partial`定义 `partialmethod`定义 partial定义 functools.partial 这个高阶函数用于部分应用一个函数.部分应用是指,基于一个函数创建一个新的可 ...

  8. 【PyQt5】PyQt5 安装 以及使用 designer 开发 python GUI 界面

    PyQt5 首先安装 Pyhon! PyQt5.pyqt5-tools 安装 安装可能遇到的问题 Qt Creator 简单介绍 界面构成介绍 开发一个最简单的 GUI 程序 拖动布局出一个界面 保存 ...

  9. Linux服务器+GPU配置总结(四)

    1. Docker: 是一个开源的应用容器引擎,可以让开发者打包自己的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.容器是完全适用沙箱机制,相互之间不会有 ...

最新文章

  1. ASP.NET MVC 表单提交教程
  2. 学习汇编语言 -王爽,自已完成的一道课程设计题 (5)
  3. 高考特长计算机2017,2017年北京理工大学计算机学院申请竞赛获奖与特长生推荐.PDF...
  4. 「后端小伙伴来学前端了」Vue中为什么直接安装less-loader会报版本过高错误?你有没有思考过?
  5. 【收藏】联想官方出品一键关闭Windows自动更新工具,和Windows自动更新说再见
  6. mysql分组查询和分组过滤
  7. rpm linux gcc安装目录,Linux环境下通过rpm安装gcc的顺序
  8. 服务器LCD显示面板,DELL服务器2950的错误代码表(前LCD面板)
  9. numpy 利用np.std() 计算出现 inf
  10. Python3中一维数组和二维数组的输入
  11. 众信金融8·28开放日:聆听投资人心声
  12. java 打印日志乱码
  13. VTK(五)---内窥镜漫游(基于VMTK血管中心线提取)
  14. Auto CAD 2020 2019 2018 2017 2016 2015 2014 2013 2012 2011 2010 全版本 附带安装教程+入门到精通视频教程
  15. Python“信息轰炸”
  16. 永久代,方法区 和 元空间之间的关系
  17. Stitcher: Feedback-driven Data Provider for Object Detection 论文学习
  18. matlab中的帮助命令
  19. 数据库系统发展的特点
  20. linux升级wine1.7,Wine 1.7.43 发布下载

热门文章

  1. 【告白气球——HTML实现】
  2. 京喜店铺有日常流量吗?店铺销量怎样吗?
  3. 2022年流动式起重机司机模拟试题及流动式起重机司机证考试
  4. chatgpt赋能Python-python3_8怎么安装matplotlib
  5. IDEA+TestNG 环境部署+疑问+学习(参考链接汇总)
  6. php数据库报错1046怎么解决,DZ报错MySQL Query Error Errno:1046错误的解决办法
  7. 猜丁壳java_搭建测试环境
  8. Ubuntu16.04.06 LTS -bash 进程占用cpu很高,中了挖矿病毒
  9. clientWidth offsetWidth scrollWidth区别
  10. 质数在mysql中怎么表达_质数如何定义