韩言福地

只有想不到的,没有办不到的。 - HY Auspicious Place

« 真正实现你童年的梦想-兰迪·波许教授 有位盲人这样说:“这个世界我看不见,但我要让我的梦想让世界看得见!” »

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

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Copyright 2007-2010 www.yinrg.com(HY Auspicious Place) . 湘ICP备06007796号.