Whidbey 初体验之局部类型 ( partial 类型)

Whidbey 初体验 之 局部类型 ( partial 类型)
Visual Studio 2005 [Whidbey] 抢先体验版 [Express Beta 1 ] 出来有一段时间了,并且在微软的官方网站上有免费的下载(下载地址:http://lab.msdn.microsoft.com/vs2005/)。就本人而言是非常喜欢c#这一新生的语言的。也许并不能说它是新生的,它是对以往各种语言的提炼,或许它是站在巨人的肩膀上的,所以才显得如此的优秀。伴随体验版而来的c# 2.0 给我们带来了新的语言特性(generics:泛型; iterators:迭代; partial classes:局部类型; anonymous methods:匿名方法;),使我们能更容易的编写出简洁明快的代码,当然这些新特性给我们带来的远不止简洁明快的代码。这只有在我们使用的过程中自己体会和别人的交流中了解。

分别用2003和2005 新建两个WindowsApplication1
2003和2005解决方案资源管理器中都会默认建立一个从System.Windows.Forms.Form 类继承的窗体类Form1
那我们比较下两个不同的IDE环境为我们自动生成的Form1的代码是怎么样的。
选中Form1.cs察看代码
2003:
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;

public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}

/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(88, 72);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(72, 32);
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);

}
#endregion

/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}

private void button1_Click(object sender, System.EventArgs e)
{

}
}
2005:
partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{

}
}
察看两个环境下Form1的代码文件 Form1.cs文件里对Form1的代码差别很大,2005中只有那么一点点,对button1的定义没有,Click事件委托也没有只有一个button1_Click()显然是有问题的。如果而且我们很快发现Class Form1是被定义成 partial 的也就是C# 2.0种的新的语言特征 局部类型。然后我们再点一下2005 IDE 解决方案资源管理器上的Show All Files按钮,会发现Form1.cs下多了个文件 Form1.Designer.cs 这是2003环境下是没有的, 察看该文件我们会发现对Class Form1的另一部份定义。

partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;

/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

#region Windows Form Designer generated code

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(75, 49);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(96, 46);
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);

}

#endregion

private System.Windows.Forms.Button button1;
}
现在好像2005对Form1的描述好像全了,2005中Form1.cs 和 Form1.Designer.cs 两个文件中对Class Form1的描述相加 就是 2003 Form1.cs 中对Class Form1的描述。由此看来 partial 类型可以使我们把对某个类的描述写在不同地方,甚至写到两个或多个不同的文件中去。partial 信息只对编译器有用,编译器在编译时看到对某个类的描述是“碎”的(partial 的),它会去其他地方收集该类的其他碎片,然后把所有的该类的碎片组合成完整的一个类,再对其编译。所以partial 体现不到编译好的 IL中去的。至于partial类型给我们带来怎么样的意义呢?我们以后再讨论。

#结束
qq:14754875
email:tiy@citiz.net
bbs:www.shixm.com/bbs

时间: 2024-08-12 03:46:17

Whidbey 初体验之局部类型 ( partial 类型)的相关文章

《深入理解C++11:C++ 11新特性解析与应用》——2.13 局部和匿名类型作模板实参

2.13 局部和匿名类型作模板实参 类别:部分人 在C++98中,标准对模板实参的类型还有一些限制.具体地讲,局部的类型和匿名的类型在C++98中都不能做模板类的实参.比如,如代码清单2-30所示的代码在C++98中很多都无法编译通过. 在代码清单2-30中,我们定义了一个模板类X和一个模板函数TempFun,然后分别用普通的全局结构体.匿名的全局结构体,以及局部的结构体作为参数传给模板.可以看到,使用了局部的结构体C及变量c,以及匿名的结构体B及变量b的模板类和模板函数,在C++98标准下都无

zephir-(2)安装和初体验

zephir-安装和初体验 前言 先在这里感谢各位zephir开源技术提供者 zephir主要是解决了PHP开发人员尝试编写和编译PHP拓展所能执行的代码的语言.这是一个支持动态/静态类型的语言,熟悉PHP开发人员可以很好的进行开发.zephir这个名字的主要来源是(Zend Engine/PHP/Intermediate),今天首先介绍zephir的安装,接着会对zephir进行一些语法上面的介绍,希望大家喜欢! 注:笔者水平有限,说的不正确的地方希望大家多多指正,一同交流技术 附上: 喵了个

Fireworks MX 之初体验2-1

在编者的苦口婆心,盛情邀请下,风云设计 的两位高手 风筝 和 心动为谁 终于答应,为广大朋友奉献对 Fireworks MX 的亲密接触后带来的初体验,为喜爱 Fireworks 的 fans 们作出贡献,特此鸣谢! 优化菜单面面观 上节我们对FWMX的最新.最酷(好像我很能落伍一样,总用老掉牙的词汇~)的各种新面板做了一个简单的介绍和了解,不知道各位是不是已经拿到了FWMX的测试版本开始体验了,相信体验的感觉总的来说应该是美妙的.本节我们来一起看看FWMX的各级菜单及其相关命令.同样,我们仍然

一名UX设计师的VR设计初体验

  本文是某VR团队设计总监在这个新领域当中进行设计初体验时所得到的一些经验分享.相信如今有很多设计师一方面不具备相关的经验,一方面又希望进入VR领域去扩展技能.开拓视野.所以希望本文能够为各位带来一些指引与帮助. 恩,这次仍是VR探索,从设计师职能出发的实战经验漫谈;对比之前的几篇,慢慢可以发现如今的设计先行者们所汇总的东西当中会有一些重要的交集.在尚未实际进入领域之前,通过识别这些交集,我们或许也可以摸到一些关键的东西了.我个人目前还没有能力去做任何偏技术的文章,例如3D方面;在当前阶段,对

一个交互新人的交互设计初体验

  交互设计初体验系列是我在从事交互设计半年多的时间里在工作中和自我学习中积累的一些关于它的思考和经验,也是对自己今年工作上的获得的成长和收获的一个小结.适合初级的交互设计师和对交互设计感兴趣的同学阅读,很多欠缺的地方希望能和大家多交流. 交互设计师这个职业似乎是这几年才开始在中国的一些公司慢慢出现,正处在一个发展的阶段.之前也很少听到有关于这个职业的介绍和培训.而这两年随着"用户体验"越来越多的被运用到产品的设计和商业的发展中,交互设计也在被更多的公司和企业所重视,虽然依然有很多的老

Kotlin 初体验:主要特征与应用

Kotlin 是一种针对 Java 平台的新编程语言.它简洁.安全.务实,并且专注于与 Java 代码的互操作性.它几乎可以用在现在Java 使用的任何地方 :服务器端开发.Android 应用,等等.本文我们将详细地探讨 Kotlin 的主要特征. 本文选自<Kotlin实战>. Kotlin初体验 让我们从一个小例子开始,来看看 Kotlin 代码长什么样子.这个例子定义了一个 Person 类来表示"人",创建一个"人"的集合,查找其中年纪最大的人

Docker的Windows容器初体验

系列文章 第一篇 Docker的Windows容器初体验 - 本文 第二篇 阿里云Windows Server 2016环境Docker试用 最近微软发布了Windows Server 2016,其中最让广大开发者和运维同学期待的就是Docker对Windows容器的支持. Windows支持两种不同类型的容器,即 Windows Server 容器和 Hyper V 容器. 这两种类型的容器的使用方式相同,也支持相同的容器映像. 但是它们的实现机制不同,提供了不同的安全隔离级别 Windows

wxWidgets初学者导引(3)——wxWidgets应用程序初体验

wxWidgets初学者导引全目录   PDF版及附件下载 1 前言2 下载.安装wxWidgets3 wxWidgets应用程序初体验4 wxWidgets学习资料及利用方法指导5 用wxSmith进行可视化设计附:学习材料清单 3 wxWidgets应用程序初体验 本文中所有的体验,在Code::Blocks中进行. 为了在Code::Blocks中编译运行C++写的wxWidgets程序,需要再做些设置. 首先,需要在环境变量里添加一个wxWidgets根目录环境变量.设置方法类似于2.3

Java8初体验(一)lambda表达式语法

感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com 本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解偏差的地方,希望大家帮忙指出,我会持续修改和优化.本文是该系列的第一篇,主要介绍Java8对屌丝码农最有吸引力的一个特性-lambda表达式. java8的安装 工欲善其器必先利其器,首先安装JDK8.过程省略,大家应该都可以自己搞定.但是有一点这里强调一下(Windows系统):目前我们工作的版本