在IssueVision的命令模式中有如下代码(\Patterns\Commander.cs)
  public static void Connect(ToolBarButton button, Command command)
  {
   ToolBarButtonCommander unused = new ToolBarButtonCommander(button, command);
  }
按理说unused是内部变量,生命周期应该在Connect方法的作用范围内,应该马上被销毁,或者说垃圾回收器可以随时回收这个对象,  但是这个对象的生命周期跟主窗体一样.

于是根据以上代码就设想,当一个类内部变量被一个外部变量引用时,那么在外部变量被销毁前这个类是不会被销毁的,以下就是一段测试代码来做这个试验(注意结果是否定的)

public class TestClass2
    {
        private string m_Name;
        private string[] m_Arr = new string[10000];
        Button m_but=null;
        public Command m_Command;
        public TestClass2( string name,Object obj)
        {


            m_Name = name;
            for (int i = 0; i < 10000; i++)
            {
                m_Arr[i] = "adssssssssssssssssssssssssssssssssssssssssssssssssssssss";
            }
            if (obj != null)
            {
                obj = m_Arr;
            }
        }
        private void HandleEvent(object sender, EventArgs e)
        {
            m_Command.Execute();
        }
        ~TestClass2()
        {
            MessageBox.Show(m_Name + ":我被销毁");
        }
        public static void Connected(Button but, string name,Object obj)
        {
            TestClass2 tstcls = new TestClass2(name,obj);

        }
    }

在form_load中有下面代码
obj 是窗体级的变量(private Object obj=null;)
             for (int i = 1; i < 20; i++)
            {

TestClass2.Connected( "1X" + i,null);
                TestClass2.Connected("2X" + i,obj);
                Application.DoEvents();
            }
结果是运行后会弹出2X,1X这样的对话框表示,这个类,被销毁了!!!

但是IssueVision里的Commander确没问题,!!

转载于:https://www.cnblogs.com/wdfrog/archive/2007/08/07/845799.html

关于IssueVision命令模式中对象生命周期的困惑相关推荐

  1. ASP.NET Core Web API下事件驱动型架构的实现(二):事件处理器中对象生命周期的管理

    在ASP.NET Core Web API下事件驱动型架构的实现(一):一个简单的实现中,我介绍了事件驱动型架构的一种简单的实现,并演示了一个完整的事件派发.订阅和处理的流程.这种实现太简单了,百十行 ...

  2. Java中的垃圾回收与对象生命周期

    转载自   Java中的垃圾回收与对象生命周期 1. 垃圾回收 垃圾回收是Java程序设计中内存管理的核心概念,JVM的内存管理机制被称为垃圾回收机制. 一个对象创建后被放置在JVM的堆内存中,当永远 ...

  3. 容器,对象生命周期管理的基石

    2019独角兽企业重金招聘Python工程师标准>>> 郑重申明:包括本文在内的很多技术文章,大多出自山外高人,而非Fans. Fans暂时没有能力写作优秀的技术文章,Fans只是转 ...

  4. [js] 说说你对js对象生命周期的理解

    [js] 说说你对js对象生命周期的理解 一切皆对象 咱们经常听到JS中"一切皆对象"?有没有问想过这是什么意思?其它语言也有"一切皆对象"之说,如Python ...

  5. MinIO对象生命周期管理解析

    目录 前言 对象过期 远程存储层(Tiers)常用分层场景 跨存储介质 跨云类型 公有云 文件迁移实例 Tiers配置 生成周期管理配置 原始桶的tiertest前缀的文件目录 远程存储层目录结构 原 ...

  6. Java 对象生命周期和类生命周期

    Java 对象生命周期 在JVM运行空间中,对象的整个生命周期大致可以分为7个阶段:创建阶段(Creation).应用阶段(Using).不可视阶段(Invisible).不可到达阶段(Unreach ...

  7. 【转】【iOS知识学习】_视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途...

    原文网址:http://blog.csdn.net/weasleyqi/article/details/8090373 iOS视图控制对象生命周期-init.viewDidLoad.viewWillA ...

  8. 《Imperfect C++中文版》——2.1 对象生命周期

    本节书摘来自异步社区出版社<Imperfect C++中文版>一书中的第2章,第2.1节,作者: [美]Matthew Wilson,更多章节内容可以访问云栖社区"异步社区&qu ...

  9. iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、v...

    2019独角兽企业重金招聘Python工程师标准>>> iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.vie ...

最新文章

  1. Python编程基础:第五十九节 守护线程Daemon Threading
  2. html 不透明阴影,CSS_css box-shadow阴影不透明的解决办法,如下面示例: 复制代码代码如 - phpStudy...
  3. html知识笔记(二)——div、table、a标签
  4. 随便聊聊,Linux 中的环境变量
  5. 《PHP、MySQL和Apache入门经典(第5版)》一2.7 基本安全规则
  6. go结构体初始化_golang中结构体的初始化方法(new方法) | 学习笔记
  7. xyz转ybc_三维弯管机交互式转档软件 (UG,SOLIDWORK,PRO/E文件转成YBC)
  8. Linux学习总结(四)-两种模式修复系统,单用户,救援模式
  9. php导入csv 进度条,php 导入导出怎么做成有进度条??
  10. 试用EF开发WEB应用程序(15): EF Servlet, or EFSP?
  11. C#中常用字符串操作
  12. Intent中putExtra()方法用法
  13. Phaser 使用介绍
  14. 跨境电商难做?你需要知道这5个“低成本低风险”跨境电商项目
  15. java 算出下一个工作日_Java 计算一段时间段内除去周六日、节假日的工作日数———超详细(全)...
  16. 排序函数sort()
  17. 古琴销售怎么做阳php学,学奏古琴,学斫古琴,开班传艺 一位越南博士的琴色人生...
  18. 【大数据AI人工智能】大数据、云计算和人工智能:未来最热门专业的要点和技能要求
  19. 会计凭证过账demo_SAP刘梦_新浪博客
  20. 监管平台审核信息概述

热门文章

  1. win7 计算机不显示收藏夹,Win7电脑收藏夹不能用怎么解决?Win7电脑收藏夹不能用解决方法...
  2. oracle user_scheduler_jobs,Oracle 定时任务dbms_scheduler
  3. Python,C++中点云 .las转.pcd
  4. GitHub上共享的简单易用 TensorFlow 代码集
  5. ubuntu + oepncv + PCL + realsenseSDK + ROS + OpenVino开发环境搭建
  6. E:By Elevator or Stairs? CF595 DP最短路
  7. 2019南昌网络赛 C题,Hello 2019
  8. mysql libs 冲突_mysql-libs的冲突
  9. 剑指offer:面试题20. 表示数值的字符串
  10. 【常用】细数那些常用的linux命令(只针对更新前端代码、上传文件到linux服务器)