c#2.0语法新特定
再<ASP.NET技术详解与应用实例>里介绍了.NET1.1里C#的基本语法,这些语法再.NET2.0的C#里同样适用。不过
在ASP.NET2.0里增加了一个新的关键字partial,partial 关键字的作用是将你的 class 分为多个部分,编译器会将多个部分拼到一起,下面我们就介绍该关键字的作用与使用。
使得使用该书的您很容易过渡到.NET2.0,或者说让您更明白微软为什么这么做,看完本文您就应该明白是因为需要才促使语言的升级,而不是因为升级促使需要
请看下面示例代码:
public partial class SampleClass
{
public void MethodA()
{
}
}
public partial class SampleClass
{
public void MethodB()
{
}
}
这里定义了一个类SampleClass,它包含MethodA和MethodB两个方法,和我们常见的不同,这个类的两个方法是分开定义的,它的作用和下面相当。
public class SampleClass
{
public void MethodA()
{
}
public void MethodB()
{
}
}
“本文主要引用了刘敏的文章,下面是它从windows窗体设计的角度理解pritial提出的原因,当然天天这里并不赞同,但是为了保持引用的完整性质,下面列出了它的解释
我猜想这个东西出现的初衷是为了解决掉:“窗体设计器生成的代码”这个令人讨厌的
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)的blogs,网址为http://ms.mblogger.cn/rustle/
以下是天天的解释。
下面我们从ASP.NET开发的角度介绍partial的使用原因
在ASP.NET1.1版本里,您应该知道,如果我们在WebForm1上放置了一个控件,例如ID为Button1的按钮则
*.aspx会做如下记录
<asp:Button id="Button1" runat="server">
而*.aspx.cs会做如下记录
protected Button Button1 ; //定义了一个Button类对象Button1
由于这种关系,使得系统的维护变的非常困难,特别是在稍微复杂的应用程序中,改动一点有时需要重新编译整个项目。而且更为难办的是,如果你在程序里按照如下使用
*.aspx
protected Button Button1 ; //定义了一个Button类对象Button1
而忘记在*.aspx定义Button1,系统还会提示
“未将对象引用设置为实例”的错误
为了解决这些问题,.NET2.0才提出了partial 关键字,它使得如下的使用是正确的
你在*.aspx里定义了一个按钮如
<asp:Button id="Button2" runat="server">
这样您在*.aspx.cs里就可以直接使用Button2,不用再定义类似 Button Button2;这样的对象,系统通过paritial自动将Button2关联起来。所以提高了维护性