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) keywordpartial是一个上下文keyword,仅仅有和 class、struct、interface 放在一起时才有keyword的含义。因此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 {}

把全部的源码作为一个类型保存在一个单独的文件中是一个好的编程习惯,但有时候一个类型变得过于庞大以至于这样做成为一个不切实际的约束。此外,编程人员常常使用源码生成器来产生一个应用程序的初始结构,然后再改动产生的代码。不幸的是,当源码在将来某个时候再次公布时,已存在的改动就要被覆盖了。

Partial types同意把类,结构和接口打破为多个代码碎片存在不同的源码文件,以便于简化开发和维护。加之partial types同意机器产生的和用户编写的类型部分分离,这样就能够方便添加工具产生的代码。

Partial,是一个新的类型修饰符,在把一个类型定义在多个部分的时候使用。以下是一个partial class的演示样例,以两个部分实现。这两个部分可能在两个不同的源码文件,比方说第一个部分是由一个数据库映射工具产生的,而第二个部分是手工编写的。

public partial class Customer
{
    private int id;
    private string name;
    private string address;
    private List<Order> orders;
    public Customer() {
        
    }
}
public partial class Customer
{
    public void SubmitOrder(Order order) {
        orders.Add(order);
    }
    public bool HasOutstandingOrders() {
        return orders.Count > 0;
    }
}

当上面的两个部分在一起编译,结果产生的代码就好像这个类是写在一个单元里一样。

public class Customer
{
    private int id;
    private string name;
    private string address;
    private List<Order> orders;
    public Customer() {
        
    }
    public void SubmitOrder(Order order) {
        orders.Add(order);
    }
    public bool HasOutstandingOrders() {
        return orders.Count > 0;
    }
}

一个partial type的全部部分必须在一起编译,这样全部的部分才干在编译的时候整合在一起。特别的是partial types不同意增加已经编译好的类型。

转载于:https://www.cnblogs.com/mfrbuaa/p/3808415.html

C# partial 说明相关推荐

  1. 微软BI 之SSIS 系列 - Lookup 组件的使用与它的几种缓存模式 - Full Cache, Partial Cache, NO Cache...

    开篇介绍 先简单的演示一下使用 Lookup 组件实现一个简单示例 - 从数据源表 A 中导出数据到目标数据表 B,如果 A 数据在 B 中不存在就插入新数据到B,如果存在就更新B 和 A 表数据保持 ...

  2. Partial Class部分类

    Partial Class ,部分类 或者分布类.顾名思义,就是将一个类分成多个部分.比如说:一个类中有3个方法,在VS 2005将该类中3个方法分别存放在3个不同的.cs文件中. 这样做的好处: 1 ...

  3. C# 2.0 的partial

    partial 关键字的作用是将你的 class 分为多个部分,编译器会将多个部分拼到一起去. public partial class SampleClass ...{ public void Me ...

  4. R语言使用DALEX包的model_profile函数对caret包生成的多个算法模型的离散变量进行分析、使用偏依赖图(Partial Dependence Plots)解释某个离散特征和目标y的关系

    R语言使用DALEX包的model_profile函数对caret包生成的多个算法模型的离散变量进行分析.使用偏依赖图(Partial Dependence Plots)解释某个离散特征和目标值y的关 ...

  5. R语言偏相关或者部分相关性系数计算实战:使用psych包计算(Partial Correlation)偏相关系数、拟合回归模型使用两个回归模型的残差计算偏相关性系数

    R语言偏相关或者部分相关性系数计算实战:使用psych包计算(Partial Correlation)偏相关系数.拟合回归模型使用两个回归模型的残差计算偏相关性系数 目录

  6. R语言偏相关或者部分相关性系数计算实战:通过拟合两个回归模型、或者pysch包计算偏相关系数(Partial Correlation)、通过方差分析获得偏相关系数的F统计量(偏F检验、二型检验)

    R语言偏相关或者部分相关性系数计算实战:通过拟合两个回归模型.或者pysch包计算偏相关系数(Partial Correlation).通过方差分析获得偏相关系数的F统计量(偏F检验.二型检验) 目录

  7. R语言偏相关或者部分相关性系数计算实战:使用psych包计算(Partial Correlation)偏相关或者部分相关性系数并用建设检验检验相关性的显著性

    R语言偏相关或者部分相关性系数计算实战:使用psych包计算(Partial Correlation)偏相关或者部分相关性系数并用建设检验检验相关性的显著性 目录

  8. Python偏相关(Partial Correlation)或者部分相关性系数计算实战:偏相关性(Partial Correlation)计算及结果解读

    Python偏相关(Partial Correlation)或者部分相关性系数计算实战:偏相关性(Partial Correlation)计算及结果解读 目录

  9. 偏依赖图(Partial Dependence Plots)是什么?排列重要性(Permutaion Importance)是什么?如何解读?有什么意义?

    偏依赖图(Partial Dependence Plots)是什么?排列重要性(Permutaion Importance)是什么?如何解读?有什么意义? 目录 偏依赖图(Partial Depend ...

  10. C++_模板特化(specialization),模板偏特化(局部特化)(partial specialization)

    C++_模板特化(specialization),模板偏特化(局部特化)(partial specialization) 1.模板特化 函数模板也可以特化,特化要符合模板参数类型 2.模板偏特化(局部 ...

最新文章

  1. SQL语言之定义约束
  2. 最常用最好记Linux命令
  3. 程序员离职原因的最佳回答_程序员面试被问离职原因,如实回答不适应996,面试官答复尴尬了...
  4. Java Hotspot G1 GC的一些关键技术
  5. 2015年《大数据》高被引论文Top10文章No.9——大数据是数据、技术,还是应用
  6. Linux该如何学习(新手入门必看)
  7. Meta Company在公开信中谴责Facebook改名
  8. linux 测试工具
  9. JSK-T1011 反向输出一个三位数【入门】
  10. SVN仓库解决APIcloud2检出错误
  11. DL实战(2):SiamFC - TensorFlow配置
  12. ​专科生学习云计算就业前景如何?
  13. micro/微店API接口(item_search-根据关键词取商品列表)
  14. [python]打日语
  15. WPF之路——绘制几何图形
  16. 程序员的十种搞笑级别
  17. 从京东双11战报中,找到未来值得国产品牌看好的发展机遇
  18. 你绝对想知道:芝麻信用新域名xin.xin是个什么鬼!
  19. 产品读书《设计中的设计》-设计
  20. sogou输入法 官方下载 mac版 v3.1.0 最新版

热门文章

  1. 苹果手机上网速度慢_科普|手机信号明明满格却上不去网?4招帮你搞定它!
  2. [leetcode] 5331. 跳跃游戏 V
  3. 稀疏矩阵------三元组存储---笔记
  4. UnityShader31:Gamma
  5. static_cast与dynamic_cast类型转换
  6. bzoj 2434 [Noi2011]阿狸的打字机(AC自动机+fail树+dfs序+树状数组)
  7. OPNET网络仿真分析-1.1.3、OPNET Modeler
  8. PatchGAN:Image-to-Image Translation with Conditional Adversarial Networks
  9. caffe常用格式binaryproto和leveldb
  10. quartus仿真29:JK触发器实现序列信号发生器0010111(分析)