• WinForm 程序的运行框架与启动流程简介(图文)


    image 

    1. 第一个方块:
      加载 Winform 的进程,这里加载的并不是你所创建的应用程序,而是 .net 框架已经创建好的系统进程.启动 Winform 时,加载 Winform 的进程,启动 Asp.NET 时,加载 IIS 的进程,各应用程序是不同的.
    2. 第二个方块:
      在 CLR 挑选好了要加载 Mscoree.dll 还是 Mscorsvr.dll 以后,就要加载 MScorlib.dll 和你所编译好的 Winform 的EXE,然后交给 JIT 去编译成当前平台可以使用的机器码.
    3. 第三个方块:
      编译好机器码以后,就可以执行指令了,这里会创建 Systemdomain,它包含了 SharedDomain 和默认的应用程序域,也就是当前应用程序自己的域,前面我们说过一个 .net 进程中可以包含多个默认的应用程序域,而这些应用程序域都会用到 mscorlib.dll,如果每个默认的应用程序域中都去加载它,那么无疑会造成内存的浪费,所以就有了 SharedDomain,它是用来放所有 Domain 都要用到的 Dll,这样就避免了浪费内存.也优化了加载的速度.
    4. 第四个方块:
      这时候默认的应用程序域,就会去找到你应用程序的入口 Main 方法,并且执行它,创建第一个被 Main 中初始化的窗体(Form).

     

    Winform 程序中的主要类及其层次关系
    image 

    1. Control 类:
      是其他控件的基类.它提供了控件的基本功能,像大小, 可视等. Button,TextBox 等都派生于它.
    2. ScrollableControl 类:
      继承了 Control 类并且添加了自动滚动能力给所有需要滚动条的控件.
    3. CommonDialog 类:
      是所有公共对话框的基类.比如 OpenFileDialog,PrintDialog.
    4. ContainerControl 类:
      继承自 ScrollableControl 并且添加了标志和焦点管理功能去放置其他控件.
    5. Form 类:
      继承了 ContainerControl 并且描述了所有显示在应用程序中的窗口. Form 类提供的属性和方法允许你显示不同类型的 forms, 包含对话框和多文档界面 (MDI) forms.所有 Windows Forms 都派生自这个类,因为它提供了 forms 所需要的基本功能.
    6. UserControl 类:
      继承自ContainerControl 类并且提供了空的控件让你可以使用 Windows Forms Designer 用来创建你自己的控件.
    7. Application 类:
      封装了 Winform 程序运行时的各种操作.

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

    clip_image002[5]

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

      · 想表示对象的部分-整体层次结构。

      · 希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

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

  • 相关阅读:
    认识一下JavaScript
    JAVA并发容器之CopyOnWrite容器
    JAVA并发容器之ConcurrentHashMap
    由浅入深理解java集合(一)——集合框架 Collection、Map
    强引用、软引用、弱引用、虚引用
    Lock和synchronized的选择
    Java并发编程:volatile关键字解析
    java线程并发-Thread类的使用
    SQL语句中:UNION与UNION ALL的区别
    抽象类与接口
  • 原文地址:https://www.cnblogs.com/SkySoot/p/2263405.html
Copyright © 2020-2023  润新知