博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
partial关键字的含义
阅读量:6423 次
发布时间:2019-06-23

本文共 2081 字,大约阅读时间需要 6 分钟。

partial关键字 C#2.0提供的新关键字,用来将一个class、struct或interface的定义拆分,写在不同的源文件中。每个源文件包含类定义的一部分,编译应用程序时将把所有部分组合起来。在以下几种情况下需要拆分类定义:

    1.处理大型项目时,使一个类分布于多个独立文件中可以让多位程序员同时对该类进行处理。

    2.使用自动生成的源时,无需重新创建源文件便可将代码添加到类中。Visual Studio 在创建 Windows 窗体、Web 服务包装代码等时都使用此方法。无需编辑 Visual Studio 所创建的文件,便可创建使用这些类的代码。

    用法如下: [modifiers] partial type

    modifier包括abstract new override virtual static extern和四个访问修饰符(public private protected internal)其中的一个。Type包括 class struct interface其中的一个。

 
    
看下面的定义:
 
public   partial   class  Employee
{
    public void DoWork()
    {}
}
public   partial   class  Employee
{
    public void GoToLunch()
    {}
}
  
  以上代码定义了一个类Employee,该类有两个方法DoWork()GoToLunch(),你完全可以把以上代码看作是:
    而实际上编译器在编译时也是这么合并的。编译器在编译时会把一个partial类所有的信息放到一起,我们可以再来扩充一下。假如我们已经定义好了两个接口:
我们的类定义如下:    这在开发分布式系统时是很有必要的,多个程序员只要分别开发自己的一部分就可以了。
 
public   class  Employee
{
    public void DoWork()
{}
    public void GoToLunch()
{}
}

 

interface  IDoSomeThing
{
    void DoWork();
    void DoPlay();
}
interface  IGoToDinner
{
    void GoToBreakfast();
    void GoToLunch();
    void GoToSupper();
}

 

public   partial   class  Employee : IDoSomeThing
{
    public void DoWork()
    {}
    public void DoPlay()
    {}
}
public   partial   class  Employee : IGoToDinner
{
    public void GoToBreakfast()
    {}
    
    [System.ObsoleteAttribute]
    public void GoToLunch()
    {}
    public void GoToSupper()
    {}
}

于是,在编译时编译器就把以上合并为一个类:

public   class  Employee : IDoSomeThing, IGoToDinner
{
    public void DoWork()
    {}
    public void DoPlay()
    {}
    public void GoToBreakfast()
    {}
    
    [System.ObsoleteAttribute]
    public void GoToLunch()
    {}
    public void GoToSupper()
    {}
}

 

其中有几点需要注意:
1.     要作为同一类型的各个部分的所有分部类型定义都必须使用 partial 进行修饰。下面这样就错误
public partial class A { }
//public class A { } // Error, must also be marked partial
2. partial  修饰符只能出现在紧靠关键字 class、struct 或 interface 前面的位置。
3.    分部类型定义中允许使用嵌套的分部类型。当然,如果嵌套类也是partial类的话,同样遵守上面的规则。例如:
partial   class  ClassWithNestedClass
{
    partial class NestedClass { }
}
partial   class  ClassWithNestedClass
{
    partial class NestedClass { }
}
 
4.  要成为同一类型的各个部分的所有分部类型定义都必须在同一程序集和同一模块(.exe 或 .dll 文件)中进行定义。分部定义不能跨越多个模块。
5.  类名和泛型类型参数在所有的分部类型定义中都必须匹配。泛型类型可以是分部的。每个分部声明都必须以相同的顺序使用相同的参数名。

转载于:https://www.cnblogs.com/daban/archive/2012/08/03/2621751.html

你可能感兴趣的文章
J2EE十三个规范小结
查看>>
算法(第四版)C#题解——2.1
查看>>
网关支付、银联代扣通道、快捷支付、银行卡支付分别是怎么样进行支付的?...
查看>>
大数据开发实战:Stream SQL实时开发一
查看>>
C++返回引用的函数例程
查看>>
dll 问题 (转)
查看>>
REST API用得也痛苦
查看>>
test for windows live writer plugins
查看>>
Tiny210 U-BOOT(二)----配置时钟频率基本原理
查看>>
代理模式
查看>>
javaweb学习总结(二十四)——jsp传统标签开发
查看>>
让script的type属性等于text/html
查看>>
linux 文件系统sysvinit 流程分析
查看>>
体素科技:2018年,算法驱动下的医学影像分析进展
查看>>
Vue 折腾记 - (8) 写一个挺靠谱的多地区选择组件
查看>>
VS Code折腾记 - (3) 多图解VSCode基础功能
查看>>
『翻译』Node.js 调试
查看>>
我的iOS开发之路总结(更新啦~)
查看>>
Java NIO之拥抱Path和Files
查看>>
微信原图泄露的只能是 Exif ,你的隐私不在这!!!
查看>>