惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Help Net Security
Help Net Security
G
Google Developers Blog
雷峰网
雷峰网
WordPress大学
WordPress大学
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Engineering at Meta
Engineering at Meta
Security Latest
Security Latest
T
Threat Research - Cisco Blogs
AWS News Blog
AWS News Blog
F
Full Disclosure
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Exploit Database - CXSecurity.com
J
Java Code Geeks
U
Unit 42
C
Cyber Attacks, Cyber Crime and Cyber Security
V
V2EX
C
Cisco Blogs
博客园 - 司徒正美
Project Zero
Project Zero
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
Blog — PlanetScale
Blog — PlanetScale
Scott Helme
Scott Helme
A
About on SuperTechFans
Hugging Face - Blog
Hugging Face - Blog
S
Securelist
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
S
Schneier on Security
G
GRAHAM CLULEY
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyberwarzone
Cyberwarzone
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
T
Threatpost
Recorded Future
Recorded Future
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
The Register - Security
The Register - Security
S
Security Archives - TechRepublic
博客园 - Franky
N
News | PayPal Newsroom
Simon Willison's Weblog
Simon Willison's Weblog
S
SegmentFault 最新的问题
W
WeLiveSecurity
A
Arctic Wolf
B
Blog

博客园 - 8user

JS仿Open()打开一个新窗口,并不是弹出新窗口 判断是否含有汉字 - 8user - 博客园 如何统计代码行执行的时间? - 8user - 博客园 时间的正则表达式验证 深入探讨IsPostBack【转】 IIS无法启动的解决方法 FCKEditor的使用及配置方法 Cool MVC: 使用正则式限定路由规则Rount - 8user C#中的值类型和引用类型 C#在线备份数据库至制定目录 - 8user - 博客园 c#实现天气预报查询 C#中的枚举器 C#里面比较时间大小三种方法 - 8user - 博客园 c#中删除ArrayList中的重复数据 - 8user - 博客园 SQL Server数据库开发的二十一条规则 c#实现程序的开机启动 - 8user - 博客园 VS2008 快捷键大全 C#调用dos命令 反射性能测试
partial关键字的含义和使用
8user · 2009-06-30 · via 博客园 - 8user

 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. 类名和泛型类型参数在所有的分部类型定义中都必须匹配。泛型类型可以是分部的。每个分部声明都必须以相同的顺序使用相同的参数名。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zabcd117/archive/2008/01/08/2029987.aspx