partial 关键字的作用是将你的 class 分为多个部分,编译器会将多个部分拼到一起去。

public partial class SampleClass
...{
public void MethodA()
...{
}
}

public partial class SampleClass
...{
public void MethodB()
...{
}
}

public class SampleClass
...{
public void MethodA()
...{
}
public void MethodB()
...{
}
}

是等价的。

我猜想这个东西出现的初衷是为了解决掉:“窗体设计器生成的代码”这个令人讨厌的 region。

对我们来说,在团队开发当中这个东西或许也会有点用处。

我观察了一下生成的 IL 代码,使用 partial 生成的代码并没有什么特殊的标记,这说明 partial 纯粹是语言的特性,CLR 完全不知道这么个玩意的存在,这也就意味着不要指望将 partial class 编译为 assembly 或者 module 什么的再与其他的人写的 partial class 去进行拼接:它只能在编译的时候起作用。

为了考验一下编译器,我试着让某一个 partial class 不显式指定父类,发现代码仍然能够正确的通过编译,编译器会按照某一个显式指定了父类的 partial 进行编译,只有在多个 partial 指定了不同父类时才会报错。同样,如果多个 partial 指定了自相矛盾的修饰符的话,编译时也会报错的。

有意思的是,我们还可以写以下这样的代码:

public partial class Sample
...{
public partial class SampleSon
...{
public partial class SampleGrandson
...{
}
}
}
public partial class Sample
...{
public partial class SampleSon
...{
public partial class SampleGrandson
...{
}
}
}

C# 2.0 的partial相关推荐

  1. android5.0(Lollipop) BLE Peripheral深入理解系统篇之提高篇

    上一篇文章讲到了广播之前系统需要进行的准备工作,那接下来我们就来真正的启动广播.首先还是先看一下上一篇文章结束的地方:@Override public void onClientRegistered( ...

  2. 程序从高版本降到2.0,数据集报错 TypedTableBase

    错误  命名空间"System.Data"中不存在类型或命名空间名称"TypedTableBase"(是缺少程序集引用吗?) 解决: 该错误出现在自动生成的XX ...

  3. NHibernate3.2+Asp.net MVC3+Extjs 4.0.2项目实践(二): NHibernate数据访问层实现

    关于NHibernate的ORM映射可以通过Hbm映射文件来完成,代码生成工具使得这一步骤变得简化:而NHibernate3.2版本集成Mapping-By-Code(代码映射),不同于其他映射方式, ...

  4. C# partial 说明

    1. 什么是局部类型? C# 2.0 引入了局部类型的概念.局部类型同意我们将一个类.结构或接口分成几个部分,分别实如今几个不同的.cs文件里. 局部类型适用于下面情况: (1) 类型特别大,不宜放在 ...

  5. DGM: A deep learning algorithm for solving partial differential equations

    论文信息 题目: DGM: A deep learning algorithm for solving partial differential equations 作者及单位: Justin Sir ...

  6. Innovus和ICC2中设置partial placement blockage的命令和区别

    Innovus中,设置partial placement blockage的命令是 createPlaceBlockage -type partial -density 75 -box {3442.3 ...

  7. 计量经济学复习笔记(四)updated2.0!

    终于进入回归了regression! 回归就是探究因变量和自变量的相关关系 因变量,就是y,又被称为被解释变量,回归子,相应变量 自变量,就是x,又被称为解释变量,回归元,控制变量 根据变量个数可以将 ...

  8. 有限元基础及ANSYS应用 - 第9节 - 0 平面应力/平面应变问题简介

    前面咱们讲的都是1维问题,下面咱们讲讲2维问题.实际上,所有的现实问题都是3维问题,可是在特定情况下,可以把它们简化为2维问题来分析.在弹性力学中,常见的有3类2维问题,即,平面应力.平面应变.轴对称 ...

  9. 快递单信息抽取【二】基于ERNIE1.0至ErnieGram + CRF预训练模型

    相关文章: 1.快递单中抽取关键信息[一]----基于BiGRU+CR+预训练的词向量优化 2.快递单信息抽取[二]基于ERNIE1.0至ErnieGram + CRF预训练模型 3.快递单信息抽取[ ...

最新文章

  1. Linux 源代码在线(http://lxr.linux.no/linux/)。
  2. 数据的设计命名的十个要点
  3. Linq to Sql : 三种事务处理方式
  4. 高内聚低耦合通俗理解_抱歉,请不要把“业务逻辑层”理解为“业务中台”
  5. python struct pack一个数组_Python中struct.pack的一个疑问
  6. 翰文付费打印后还有水印吗_免费开通小程序商城?!有支付功能吗?
  7. 计算机系统如何禁止删除文件,电脑禁止安装删除文件 禁止复制电脑文件的方法...
  8. selenium拖动元素java_使用Java在Selenium WebDriver中聚焦元素的正确方法
  9. linux修改环境截图,Linux环境下php实现给网站截图的方法.docx
  10. 玩转USB HID系列:USB先导知识简明
  11. easyswoole验证码的使用
  12. springboot关闭http登录验证
  13. 电机驱动模块--L298N
  14. java实现断点续播_vue-video-player 断点续播的实现
  15. 强大的 Stream 函数式编程
  16. Python3脚本抢票
  17. 判断页面是否在微信或者企业微信环境下
  18. 通过不同的查询方式解决笛卡尔集问题
  19. 矿物质饲料补充剂的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  20. 如何在CAD中加载卫星地图并作街道与建筑绘制

热门文章

  1. .pgr照片文件解析,C++与Java存储数据差别大小端模式
  2. opencv线性插值(上采样)
  3. Yolo模型部署的两种方法
  4. P1160 队列安排 链表
  5. 【面向对象编程】(2) 类属性的定义及使用;__repr__()方法
  6. 图像几何变换C++实现--镜像,平移,旋转,错切,缩放
  7. 剑指offer:面试题13. 机器人的运动范围
  8. 关于hp惠普笔记本电脑清洗(真的要水洗哟)
  9. vscode提交代码
  10. Unity粒子系统创建VFX游戏特效学习教程 Visual Effects in Unity Particle Systems [Beginner’s Guide]