(声明:本系列只想给大家介绍.net框架,并不是语法和类的使用的讲解,所以只能概括的描述一下所提到的类,如果有疑问可以到MSDN上面去查)      

 

      前面我们讲解了.net大体的运行框架,和一些常用的Dll,现在我们就要来学习具体的应用程序了,首先来讲解一下Winform的运行框架吧.

 

我们现在先来看图:

 

 

在本系列的第一篇中,我们也是用这张图,在这里只是加了些注解,虚线连接的方块就是Winform加载时和别的应用程序的不同之处.

 

首先从第一个方块说起:加载Winform的进程,这里加载的并不是你所创建的应用程序,而是.net框架已经创建好的系统进程.启动Winform时,加载Winform的进程,启动Asp.NET时,加载IIS的进程,各应用程序是不同的.

 

第二个方块:在CLR挑选好了要加载Mscorewk.dll还是Mscorsvr.dll以后,就要加载MScorlib.dll和你所编译好的Winform的EXE,然后交给JIT去编译成当前平台可疑使用的机器码.

 

第三个方块:编译好机器码以后,就可以执行指令了,这里会创建Systemdomain,它包含了SharedDomain和默认的应用程序域,也就是当前应用程序自己的域,前面我们说过一个.net进程中可以包含多个默认的应用程序域,而这些应用程序域都会用到mscorlib.dll,如果每个默认的应用程序域中都去加载它,那么无疑会造成内存的浪费,所以就有了SharedDomain,它是用来放所有Domain都要用到的Dll,这样就避免了浪费内存.也优化了加载的速度.

 

第四个方块:这时候默认的应用程序域,就会去找到你应用程序的入口Main方法,并且执行它,创建第一个被Main中初始化的窗体(Form).

 

OK明白了Winform的启动过程,我们来看看Winform程序中要用到的主要类的层次关系:

 

 
1.Control 类是其他控件的基础类.它提供了控件的基本功能,像大小, 可视等. Button,TextBox等都派生于它


2.ScrollableControl 类继承了Control 并且添加自动滚动能力给所有需要滚动条的控件.CommonDialog是所有公共对话框的基类.比如OpenFileDialog,PrintDialog.


3.ContainerControl 类继了ScrollableControl 并且添加了标志和焦点管理功能去放置其他控件.


4.Form 类继承了ContainerControl 并且描述了所有显示在应用程序中的窗口.Form 类提供的属性和方法允许你显示不同类型的forms, 包含对话框和多文档

界面 (MDI) forms.所有Windows Forms 都派生自这个类因为它提供了forms 所需要的基本功能.


5.UserControl 类也直接继承自ContainerControl 类并且提供了空的控件让你可以使用Windows Forms Designer 用来创建你自己的控件.

6.Application类封装了Winform程序运行时的各种操作.

 

 在在这里MS用到一种设计模式,这种模式在做应用程序界面时,经常用到,他就是Composite(组合)模式:

 

 

模式的意图:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。

 

模式的使用场景:

  • 想表示对象的部分-整体层次结构。
  • 希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

 上述类层次中的Component和设计模式图中的Component一样,定义一些公用的方法,ContainerControl 就是设计模式图中Composite,它里面维护一个继承自Component的列表,可以放入Leaf或者是Composite.Leaf就是不继承自ContainerControl 的,但是继承自Component的类.这样就可以形成一种树型的关系,我们都知道一个Form里面可以包含多个Pannel,而每个Pannel中又可以包含多个其他的控件,甚至还可以包含Pannel.而我们不需要去管这个Form里面到底有什么,只要用FindControl就可以找到了,这和上面适用性"希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象"相匹配. 使我们的应用更加的方便,也更有利于控件的组合.

 

 

好了,对Winform的框架的讲解就到这里.

 

下一篇: 图解DotNet框架之八:ASP.NET  

 

 

posted on 2008-07-29 15:45  徐 磊  阅读(5273)  评论(7编辑  收藏  举报