partial 关键字允许把类、结构、方法或者接口放在多个文件中。一般情况下,某种类型的代码生成器生成了一个类的某部分,所以把这类放在多个文件中是有益的。假定要给类添加一些从工具中自动生成的内容。如果重新运行该工具,前面所做的修改就会丢失。partial 关键字有助于把类分开放在两个文件中,而对不由代码生成器定义的文件进行修改。

partial 关键字的用法是:把Partial放在class、struct、或者inteface关键字前面。在下面的举例中 SampleClass类驻留在两个不同的源文件 SampleClassAutogenerated.cs 和 SampleClass.cs中。

//SampleClassAtuogenerated.cs
partial class SampleClass
{public void MethodOne(){}
}//SampleClass.cs
partial class SampleClass
{public void MethodTwo(){}
}

编译包含这两个源文件项目时,会创建一个SampleClass类,它有两个方法MethodOne() 和 MethodTwo()。

如果声明类时 使用了下面的关键字,则这些关键字就必须应用于同一个类型的的所有部分。

1、public

2、private

3、protected

4、internal

5、abstract

6、sealed

7、new

8、一般约束

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

//SampleClassAutogenerated.cs
[CustomAttribute]
partial class SampleClass:SampleBaseClass,IsampleClass
{public void MethodOne(){}
}//SampleClass.cs
[AnotherAttribute]
partial class SampleClass:IOtherSampleClass
{public void MethodTwo(){}
}

编译后,等价的源文件变成:

[CustomAttribute]
[AnotherAttribute]
partial class SampleClass:SampleBaseClass,ISampleClass,IOtherSampleClass
{public void MethodOne(){}public void MethodTwo(){}
}

注意:尽管partial 关键字很容易创建跨多个文件的巨大的类,且不同的开发人员处理同一个类的不同文件,但是关键字并不用于这个目的。在这种情况下,最好把大类拆分成几个小类,一个类只用于一个目的。

部分类可以包含部分方法。如果生成的代码应该调用可能不存在的方法,这就是非常有用的。扩展部分类的程序员可以决定创建部分方法的自定义实现代码,或者什么也不做。下面的代码片段包含一个部分类,其方法MethodOne调用APartialMethod方法。APartialMethod方法用partial关键字声明:因此不需要任何实现代码。如果没有实现代码,编译器将删除这个方法调用:

//SampleClassAtuogenerated.cs
partial class SampleClass
{public void MethodOne(){APartiaMethod();}public partial void APartialMethod();
}

部分方法在实现可以放在部分类的任何其他地方,如下面的代码片段所示。有了这个方法,编译器就在MethodOne内创建代码,调用这里声明的APartialMethod:

//SampleClass.cs
partial class SampleClass : IOtherSampleClass
{public void APartilMethod(){//implementation of APartialMethod}
}

部分方法必须是void类型,否则编译器在没有实现了代码的情况下无法删除调用。

C# partial 部分类使用简单举例说明相关推荐

  1. WinForm中Partial部分类的使用

    文章目录 1 WinForm中Partial部分类的使用 1.1 WinForm中Partial部分类的简要介绍 1 WinForm中Partial部分类的使用 1.1 WinForm中Partial ...

  2. partial部分类

    <> using System; using System.Collections.Generic; using System.Linq; using System.Text;namesp ...

  3. (13)C#传智:访问修饰符,简单工厂模式,序列化与反序列化,部分类,密封类,接口(第13天)

    内容超级多,慢慢来... 深入BinaryFormatter 一.访问修饰符 public: 公共的,公开的     private:私有的,只能在当前类的内部访问     protected:受保持 ...

  4. Partial Class部分类

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

  5. Proguard 部分类不混淆的技巧

    Proguard 部分类不混淆的技巧 最近比较忙,博客和 codeKK 都两个月没怎么更新了.赶在月末分享个小技巧. 一.场景 两年前在 Proguard 语法及常用 proguard.cfg 代码  ...

  6. java 部分类_为什么微软部分类和Java不?

    微软成功的秘密(不再是秘密了)是GUI(图形用户界面). 如果你是像我这样的老家伙,你会记得直到80年代的操作系统都是基于DOS的,有那些黑色的窗口和残忍的命令,如dir, edit, mkdir,等 ...

  7. Intellij IDEA设置忽略部分类编译错误

    有些时候我们的项目中有些错误,但这些错误并不影响项目的整体运行(或许是没有使用到),默认情况下idea是无法通过编译的,因此也就无法部署运行,要达到正确运行项目的目的需要作一些设置才行. 设置Inte ...

  8. C#编程(十九)----------部分类

    部分类 C#中使用关键字partial把类,结构或结构放在多个文件中.一般情况下,一个类全部驻留在单个文件中.但有时候,多个开发人员需要访问同一个类,或者某种类型的代码生成器生成了一个类的某部分,所以 ...

  9. C#部分类与部分方法

    部分类也可以定义部分方法.部分方法在部分类中定义,但没有方法体,在另一个部分类中执行.在这两个部分类中,都要使用partial关键字. public partial class MyClass { p ...

最新文章

  1. 最长公共子序列(JAVA实现)
  2. [学习笔记] 乱世之神杀疯了 —— K-D tree
  3. EnvironmentError: mysql_config not found
  4. openstack中resize更改虚拟机内存、cpu大小后虚拟机状态显示VERIFY_RESIZE
  5. 【Python爬虫】网络爬虫的“盗亦有道”
  6. 云计算之路-阿里云上:4000IOPS的RDS+16核CPU的负载均衡
  7. [biztalk笔记]-1.Hello World!
  8. linux 进程内存 limit,Linux 中的Soft limit 和Hard limit
  9. pythonsuper多重继承_解决python super()调用多重继承函数的问题
  10. CodeJock 实现MFC换肤
  11. Redis项目应用场景与实例汇总
  12. 用python批量下载modis数据的速度怎么样_MODIS数据下载与处理-pymodis的使用(持续更新...)...
  13. 我的海淀驾校考驾照之路
  14. 计算机文化基础感想,提高《计算机文化基础》教学效果地几点心得.doc
  15. mysql proxy maxscale_通过Maxscale代理,实现MySQL读写分离
  16. xp系统和服务器同步时间出错,xp电脑时间同步出错该怎么解决?电脑时间同步错误解决方法...
  17. Ai智能对话页面html,js人工智能对话框 - osc_q50is30g的个人空间 - OSCHINA - 中文开源技术交流社区...
  18. 不知不觉自己的C盘越来越大了?你可能需要看一看这个
  19. Android 加固应用
  20. IntelliJ IDEA File Header

热门文章

  1. MFC鼠标OnMouseHover使用
  2. 【风马一族_xml】xmlp之dtd1
  3. iOS开发UI篇—使用storyboard创建导航控制器以及控制器的生命周期
  4. unity, 相机空间 与 相机gameObject的局部空间
  5. (转)关于X64位系统IIS7下支持32位asp.net程序
  6. 笔试题--Multicore简答题(下)
  7. windows7 删除hiberfil.sys文件的方法
  8. java查询SQLServer遇到问题:对象名无效。
  9. iphone viewdidLoad运行以及参数的传递。
  10. linux 网卡驱动安装