1.为何要引入Partial Type

通常,我们在一个.cs文件中维护一个类,这也是一种一般约定,也算一个良好的编程风格,但是有些时候,这个类或类型非常庞大,这对可读性、维护性来说成了一种约定的限制。

当我们接触过一些 ORM 框架的自动生成代码映射的功能时,会发现,当我们使用工具生成了一些基本机构的代码时,很多类都是 partial 类,这是因为当我们在自动代码生成的基础上修改一些自定义的东西后,当再次auto-code时,自定义的代码就被覆盖了,当然我们通常也可以在框架提供的模板中做一些自定义的模板以实现我们的要求,但是如果自己维护的话有时会更加方便。

除了以上2种场景,还有一些情况下,当我们团队开发需要较明确的分工时,一个类可能由2个以上的人员来完成,这时候写局部类也是一个很好的选择。

2. Partial Type 的定义和应遵循的约定

    不完整类型(Partial Type) : 可以让类、结构、接口分为多个不同的部分存储在不同的源文件中。(不支持委托、枚举)

   不完整类型使用约定:

(1)、不完整类型的所有部分必须同时在同一命名空间下编译,在编译时各个部分被融合到一起。

(2)、不完整类型的所有部分的修饰符必须保持一致性,不能相互矛盾。

(3)、不完整类型的各个部分实现的接口、Attribute 具有累加效应。

 1 public partial class Program
 2 {
 3     public void BaseFunc()
 4     {
 5         Console.WriteLine("工具生成的基本结构方法");
 6     }
 7
 8     static void Main(string[] args)
 9     {
11        //编译时,和一个类2个方法的效果是一样的
13        Console.Read();
14      }
15 }
16
17 public partial class ProgramPartial
18 {
19     public void ExtendFunc()
20     {
21         Console.WriteLine("写一些自定义的方法");
22     }
23 }

转载于:https://www.cnblogs.com/ydchw/p/3734506.html

C#基础—不完整类型(局部类型)相关推荐

  1. 笔记05 局部类型

    一:局部类型 1. 局部类型 C# 2.0 引入了局部类型的概念.局部类型允许我们将一个类.结构或接口分成几个部分,分别实现在几个不同的.cs文件中. 局部类型适用于以下情况: (1) 类型特别大,不 ...

  2. (JS基础)DOM:节点类型

    Node 类型 所有节点类型都继承于 Node 类型,因此所有节点类型都共享这相同的基本属性和方法. 基本属性和方法 nodeName :节点名.对于元素类型,则是元素的标签名(均为大写),如&quo ...

  3. 局部类型 之 部分方法

    局部类型使用关键字 :partial, 关于局部类型的用法,大概可以概括为:把一个类或者值类型,或者接口等等, 写在不同的文件里.编译器在编译的时候,会把这些文件合并起来,成一个类. 关于局部类型,这 ...

  4. 不允许指针指向不完整的类类型

    问题描述:不允许指针指向不完整的类类型 问题原因 1:没有包含对应结构体的头文件 解决办法 1:直接添加相对应的头文件 问题原因 2:对应的结构体定义写在了C/CPP文件里 解决办法 2:将结构体定义 ...

  5. 1023day5:class类属性方法、每次执行类属性+1、内建模块、时间装饰器wrapper、面向对象__slots__方法:限制类的属性等基础知识、正则表达式基础知识、多态鸭子类型

    文章目录 一.类class 1.Python类class 属性 方法 2.类的构造方法__init__() 3.每次执行一次类的属性+1 二.模块 1.内建模块 2.第三方模块 3.定义自己的模块 三 ...

  6. 【001】C++11允许匿名类型、局部类型作为模板实参

    文章目录 1. C++98 不允许匿名类型.局部类型作为模板实参 2. C++11 支持匿名.句柄类型作模板实参 1. C++98 不允许匿名类型.局部类型作为模板实参 在C++98中,匿名类型(或变 ...

  7. Python基础_Python介绍及变量类型

    目录 一.Python语言介绍 高级语言: 面向对象: 编译性语言: 脚本语言是一种解释性的语言 二.Python起源 三.Python优缺点 1.优点 (1)简单 (2)易学 (3)免费.开源 (4 ...

  8. E0070——不允许使用不完整的类型和E3365——不允许使用不完整的类类型解决办法

    如果在Visual Stdio2019遇到以下问题 不允许使用不完整的类型: 不允许使用不完整的类类型:  解决办法:  在头文件中加入#include<fstream> 如有错误,敬请指 ...

  9. 【JAVA SE】第二章 Java语法基础、数据类型、基本类型的字面值、基本类型的类型转换和运算规则

    第二章 Java语法基础.数据类型.基本类型的字面值.基本类型的类型转换.运算规则和标识符命名风格 文章目录 第二章 Java语法基础.数据类型.基本类型的字面值.基本类型的类型转换.运算规则和标识符 ...

最新文章

  1. 企业信息化的定义、内涵
  2. AngularJs 常用指令标签
  3. 学python编程_学习Python编程,我们应该如何学?学习内容包括哪些?
  4. Java 多线程(二)启动线程的三种方式和源码分析
  5. 【数学建模】基于matlab GUI彩票仿真系统【含Matlab源码 1501期】
  6. 华硕服务器主板型号命名规则,详细解读主板厂商命名规则——华硕篇
  7. CMD-NET命令详解
  8. centos6.8安装anjuta
  9. php 中echo用法,php echo的用法详解
  10. vs(c++)修改图标
  11. 木门锁孔合页综合加工机器
  12. 如何使用mtPaint制作像素艺术和GIF动画
  13. java中文分词的简单实现
  14. 使用selenium爬取网页
  15. nordic 52832中添加RTT打印
  16. c语言程序设计讲义,《C语言程序设计》案例讲义 - 完整版
  17. java中定义坐标_Java 基础接口——坐标
  18. 简单说说NVMe 2.0协议
  19. 面试官:项目中最大的风险是什么?
  20. kotlin跨平台_探索Kotlin跨平台第1部分

热门文章

  1. Linux scp常用命令
  2. Spring Cloud之Hystrix
  3. 初入angular4——实际项目搭建总结
  4. hdoj--2534--Score(gcd)
  5. 利用svn自动同步更新到网站服务器 -- 网摘
  6. jquery easyui datagrid 排序列
  7. LOST 迷失 Season 1
  8. 算法------------完全平方数(Java版本)
  9. Android stadio 导入不在当前工程目录里的工程
  10. 关于android创建快捷方式会启动两个应用的问题(一)