.NET开发

本类阅读TOP10

·NHibernate快速指南(翻译)
·vs.net 2005中文版下载地址收藏
·【小技巧】一个判断session是否过期的小技巧
·VB/ASP 调用 SQL Server 的存储过程
·?dos下编译.net程序找不到csc.exe文件
·通过Web Services上传和下载文件
·学习笔记(补)《.NET框架程序设计(修订版)》--目录
·VB.NET实现DirectDraw9 (2) 动画
·VB.NET实现DirectDraw9 (1) 托管的DDraw
·建站框架规范书之——文件命名

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
C# 2.0 之 partial[1]

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

常常看见大家在热火朝天的讨论 VS.Net Whidbey 和 .Net FrameWork 2.0 的新功能,而我却现在还在这边比对了半天才敢确定我的“Whidbey”这七个字母没有敲错。:(

今天刚刚在 VPC 中装上了 VS.Net 2005 Community Technology Preview,决心好好体验一把 .Net Framework 2.0 和 C# 2.0 的犀利之处。

打开新的 VS.Net,新建一个 WinForm Application,马上就发现了不同之处:“窗体设计器生成的代码”哪里去了?InitializeComponent()那里去了?

端详片刻,才发现原来是这个 partial 关键字搞的鬼。

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
            ...{
            }
        }
    }

刘敏(Rustle Liu) http://ms.mblogger.cn/rustle/




相关文章

相关软件