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

原创 2004年08月15日 15:24:00

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

C/C++ 局部类和嵌套类

主要参考资料:C++编程思想和 高质量编程 以及网络文章 局部类 局部类是指在函数中定义类。 (c++不能在函数中定义函数。c++在类中定义的函数也就是成员函数。)这个类以及由它创建...
  • u010236550
  • u010236550
  • 2014年02月12日 14:15
  • 2696

LaTeX局部改变字体类型

从StackExchange获取的资料 翻译如下可以使用fontspec这个宏包 可以定义一个新的形式如:\newfamily\cmd[font features]{font name这里是po...
  • cdqn10086
  • cdqn10086
  • 2017年04月16日 21:31
  • 1655

Struts2(二)局部与全局类型转换器

所谓类型转换器就是继承一个类DefaultTypeConverter,然后重写方法实现。应用类型转换器会有两种情况: 1、由请求参数的值转换成属性的值 2、使用struts2的标签,进行数据回显...
  • u011731233
  • u011731233
  • 2015年06月17日 18:14
  • 1508

partial classes(局部类型)

partial classes的定义      c#2.0引入了局部类型的概念。局部类型允许我们将一个类、接口或结构分成好几个部分,分别实现在几个不同的.cs文件中。 局部类型适用于以...
  • newforestsky
  • newforestsky
  • 2011年10月28日 14:04
  • 212

C#2.0 锐利体验系列课程(3):局部类型、空属类型、静态类

  • 2009年05月24日 14:33
  • 9.12MB
  • 下载

C# 锐利体验2.0 (3):局部类型、空属类型、静态类.pdf

  • 2007年07月28日 10:01
  • 1.85MB
  • 下载

C#2.0.锐利体验系列课程(3):局部类型、空属类型、静态类

  • 2009年12月19日 21:07
  • 178KB
  • 下载

C#之十七 局部类型

C# 2.0 引入了局部类型的概念来允许我们将一个类、结构或接口分成几个部分放在不同的文件中。   重点   Ø        局部类型的定义及注意点 Ø  ...
  • zhangchen124
  • zhangchen124
  • 2016年05月02日 17:47
  • 379

Struts2 自定义局部类型转换器 出现异常 没捕获 将进convertError

问题描述:  局部类型转换器中出现异常,但没自己捕获,将会进入convertError先看代码当输入错误的日期格式时候,前后台出现的情况 现象描述:  ①strings中只有一个,但我列出三个,出现...
  • fanfan4569
  • fanfan4569
  • 2016年09月24日 21:23
  • 283

列课程(3):局部类型、空属类型、静态类.rar

  • 2008年12月22日 21:48
  • 9.12MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Whidbey 初体验之局部类型 ( partial 类型)
举报原因:
原因补充:

(最多只允许输入30个字)