简单的来说

partial是局部类型的意思
就是说有这个关键字的类、结构或接口可以写成几个部分
比如 public partial class Program
{
static void Main(string[] args)
{
}
} partial class Program
{
public void Test()
{
}
}
编译后它相当于
public class Program
{
static void Main(string[] args)
{
} public void Test()
{
} }

下面作详细的分析:

partial关键字允许把类、结构或接口放在多个文件中。一般情况下,一个类存储在单个文件中。但有时,多个开发人员需要访问同一个类,或者某种类型的代码生成器生成了一个类的某部分,所以把类放在多个文件中是有益的。

partial关键字的用法是:把partial关键字放在class,struct或interface关键字前面。

我在下面用几个例子作说明:

含有三个类文件:PartialClassPart1.cs,PartialClassPart2.cs,Program.cs,两个部分类分别置于前面两个类文件中,各有一个方法。

【PartialClassPart1.cs】
using System;
namespace PartialClass
{
    partial class partialClass
    {
        public void Method1()
        {
            Console.WriteLine("PartialClassPart1-partialClass-Method1");
        }
    }
} 【PartialClassPart2.cs】
using System;
namespace PartialClass
{
    partial class partialClass
    {
        public void Method2()
        {
            Console.WriteLine("PartialClassPart2-partialClass-Method2");
        }
    }
} 代码执行类【Program.cs】
using System;
namespace PartialClass
{
    class Program
    {
        static void Main(string[] args)
        {
            partialClass Pc = new partialClass();
            Pc.Method1();
            Pc.Method2();
            Console.ReadKey();
        }
    }
}

结果:

PartialClassPart1-partialClass-Method1

PartialClassPart1-partialClass-Method2

当然:这两个method的名字不能一样!

//BigClassPart1.cs
[CustomAttribute]
partial class TheBigClass:TheBigBaseClass,IBigClass
{
           public void Method1(){};
}
//BigClassPart2.cs
[AnotherAttribute]
partial class TheBigClass:IOtherBigClass
{
           public void Method2(){};
}
编译后的结果:
[CustomAttribute]
[AnotherAttribute]
partial class TheBigClass:TheBigBaseClass,IBigClass,IOtherBigClass
{
           public void Method1(){};
           public void Method2(){};
}

注意点,总结:

如果声明类使用了下面的关键字,这些关键字将应用于同一个类的所有部分:

public,private,protected,internal,abstract,sealed,new ,一般约束。

在嵌套的类型中,只要partial关键字位于class关键字的前面,就可以嵌套不分类。在把部分类编译到类型中时,会合并属性,XML注释,接口,泛型类型的参数属性和成员。

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# partial 关键字分析的更多相关文章

  1. c#中的partial关键字(转)

    c#中的partial关键字 Partial:      这是C#2.0的新特性 Partial关键字起到把一个class分段组合作用,能用于多个接口或一个继承 代码片断: namespace Com ...

  2. C#里partial关键字的作用(转摘)

    C#里partial关键字的作用(转摘) 1. 什么是局部类型? C# 2.0 引入了局部类型的概念.局部类型允许我们将一个类.结构或接口分成几个部分,分别实现在几个不同的.cs文件中. 局部类型适用 ...

  3. 高性能mysql-----MySQL_explain关键字分析查询语句(一)

    转载地址:https://www.cnblogs.com/xpp142857/p/7373005.html   MySQL_explain关键字分析查询语句 通过对查询语句的分析,可以了解查询语句的执 ...

  4. C# partial 关键字

    C# partial关键字详解 partial关键字允许把类.结构或接口放在多个文件中.一般情况下,一个类存储在单个文件中.但有时,多个开发人员需要访问同一个类,或者某种类型的代码生成器生成了一个类的 ...

  5. C#中的partial关键字

    这节讲一下partial(局部的,部分的)关键字,初学者可能没有接触过这个关键字,但是只要你写过winform或者WPF应用程序的话,那你肯定被动用过这个关键字.首先介绍一下这个关键字的作用,它用作定 ...

  6. C#中partial关键字

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

  7. c#中Partial关键字的作用

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

  8. Java基础(二)-static关键字分析

    static关键字是我们在编程中经常会使用到的,但有些可能只知其然而不知其所以然.下面介绍static关键字的作用再通过例子结合说明. static关键字共有五种作用(先说明static所修饰的不会改 ...

  9. c# partial 关键字的使用

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

随机推荐

  1. Linux系统运行级别和关机重启命令介绍

    Linux系统运行级别介绍 Linux系统有七种运行级别(Run Level),各个运行级别下,系统有不同的状态,各个级别的意义描述如下. 0:关键级别1:单用户运行级别,运行rc.sysinit和r ...

  2. 基于UGUI的框架

    这个框架简单易懂,上手就可以直接拿来用,主要是单例管理类,界面和界面之间的互相交流通过单例去实现,个人感觉不是很好,但是我特别喜欢他的管理层级非常分明. 之后会发一个广播机制,结合上这套UI框架,但是 ...

  3. 可爱精灵宝贝 DP/爆搜

    考崩了 T2 这题是个DP的好题啊(凡是我不会的都是好题,所以所有的题都是好题(雾)) DP思路: 分析性质:这个人对于路上的小精灵,能收集就一定会收集,即他每次都会收集这一段区间的小精灵 然后就考虑 ...

  4. 通俗易懂了解Vue双向绑定原理及实现

    看到一篇文章,觉得写得挺好的,拿过来给大家分享一下,刚好解答了一些困扰我的一些疑惑!!! 1. 前言 每当被问到Vue数据双向绑定原理的时候,大家可能都会脱口而出:Vue内部通过Object.defi ...

  5. 2019年10月11号 王庆超 linux

    1.计算机操作系统简介 (1)掌握操作系统的定义:操作系统是一个用来协调.管理和控制计算机硬件和软件资源的系统 程序,它位于硬件和应用程序之间. (2)掌握操作系统的内核的定义:操作系统的内核是一个管 ...

  6. JS中的相等性判断===, ==, Object.is()

    首发地址:http://www.geeee.top/2019/11/15/equality-comparisons/,转载请注明出处 相信刚接触JS的人都会被他的想等性判断给整糊涂,看看下面代码,你能 ...

  7. 关于Jvm的见解(二)

    栈管运行,堆管存储!!! 栈呢,也叫作栈内存,主要管java程序的运行,在线程创建时创建,生命周期和线程一致,只要线程一结束,该栈就被GC,是线程私有的.基本类型的变量和对象的引用数据类型的变量都在栈 ...

  8. ThreadLocal<T> 源码解析

    在activeJDBC框架内部的实现中看到了 ThreadLocal 这个类,记录下了每个线程独有的连接 private static final ThreadLocal<HashMap< ...

  9. python学习基础—day01

    一. python是什么? 优势:简单, 可以跨平台 劣势:执行效率没有C语言那么高 python是解释型语言,逐行编译解释,在不同的系统windows与Linux,需要不同的解释器来编译. 而编译型 ...

  10. java操作RabbitMQ添加队列、消费队列和三个交换机

    假设已经在服务器上安装完RabbitMQ.我写的教程 一.发送消息到队列(生产者) 新建一个maven项目,在pom.xml文件加入以下依赖 <dependencies> <depe ...