关于IssueVision命令模式中对象生命周期的困惑
public static void Connect(ToolBarButton button, Command command)
{
ToolBarButtonCommander unused = new ToolBarButtonCommander(button, command);
}
按理说unused是内部变量,生命周期应该在Connect方法的作用范围内,应该马上被销毁,或者说垃圾回收器可以随时回收这个对象, 但是这个对象的生命周期跟主窗体一样.
于是根据以上代码就设想,当一个类内部变量被一个外部变量引用时,那么在外部变量被销毁前这个类是不会被销毁的,以下就是一段测试代码来做这个试验(注意结果是否定的)
{
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命令模式中对象生命周期的困惑相关推荐
- ASP.NET Core Web API下事件驱动型架构的实现(二):事件处理器中对象生命周期的管理
在ASP.NET Core Web API下事件驱动型架构的实现(一):一个简单的实现中,我介绍了事件驱动型架构的一种简单的实现,并演示了一个完整的事件派发.订阅和处理的流程.这种实现太简单了,百十行 ...
- Java中的垃圾回收与对象生命周期
转载自 Java中的垃圾回收与对象生命周期 1. 垃圾回收 垃圾回收是Java程序设计中内存管理的核心概念,JVM的内存管理机制被称为垃圾回收机制. 一个对象创建后被放置在JVM的堆内存中,当永远 ...
- 容器,对象生命周期管理的基石
2019独角兽企业重金招聘Python工程师标准>>> 郑重申明:包括本文在内的很多技术文章,大多出自山外高人,而非Fans. Fans暂时没有能力写作优秀的技术文章,Fans只是转 ...
- [js] 说说你对js对象生命周期的理解
[js] 说说你对js对象生命周期的理解 一切皆对象 咱们经常听到JS中"一切皆对象"?有没有问想过这是什么意思?其它语言也有"一切皆对象"之说,如Python ...
- MinIO对象生命周期管理解析
目录 前言 对象过期 远程存储层(Tiers)常用分层场景 跨存储介质 跨云类型 公有云 文件迁移实例 Tiers配置 生成周期管理配置 原始桶的tiertest前缀的文件目录 远程存储层目录结构 原 ...
- Java 对象生命周期和类生命周期
Java 对象生命周期 在JVM运行空间中,对象的整个生命周期大致可以分为7个阶段:创建阶段(Creation).应用阶段(Using).不可视阶段(Invisible).不可到达阶段(Unreach ...
- 【转】【iOS知识学习】_视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途...
原文网址:http://blog.csdn.net/weasleyqi/article/details/8090373 iOS视图控制对象生命周期-init.viewDidLoad.viewWillA ...
- 《Imperfect C++中文版》——2.1 对象生命周期
本节书摘来自异步社区出版社<Imperfect C++中文版>一书中的第2章,第2.1节,作者: [美]Matthew Wilson,更多章节内容可以访问云栖社区"异步社区&qu ...
- iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、v...
2019独角兽企业重金招聘Python工程师标准>>> iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.vie ...
最新文章
- Python编程基础:第五十九节 守护线程Daemon Threading
- html 不透明阴影,CSS_css box-shadow阴影不透明的解决办法,如下面示例: 复制代码代码如 - phpStudy...
- html知识笔记(二)——div、table、a标签
- 随便聊聊,Linux 中的环境变量
- 《PHP、MySQL和Apache入门经典(第5版)》一2.7 基本安全规则
- go结构体初始化_golang中结构体的初始化方法(new方法) | 学习笔记
- xyz转ybc_三维弯管机交互式转档软件 (UG,SOLIDWORK,PRO/E文件转成YBC)
- Linux学习总结(四)-两种模式修复系统,单用户,救援模式
- php导入csv 进度条,php 导入导出怎么做成有进度条??
- 试用EF开发WEB应用程序(15): EF Servlet, or EFSP?
- C#中常用字符串操作
- Intent中putExtra()方法用法
- Phaser 使用介绍
- 跨境电商难做?你需要知道这5个“低成本低风险”跨境电商项目
- java 算出下一个工作日_Java 计算一段时间段内除去周六日、节假日的工作日数———超详细(全)...
- 排序函数sort()
- 古琴销售怎么做阳php学,学奏古琴,学斫古琴,开班传艺 一位越南博士的琴色人生...
- 【大数据AI人工智能】大数据、云计算和人工智能:未来最热门专业的要点和技能要求
- 会计凭证过账demo_SAP刘梦_新浪博客
- 监管平台审核信息概述
热门文章
- win7 计算机不显示收藏夹,Win7电脑收藏夹不能用怎么解决?Win7电脑收藏夹不能用解决方法...
- oracle user_scheduler_jobs,Oracle 定时任务dbms_scheduler
- Python,C++中点云 .las转.pcd
- GitHub上共享的简单易用 TensorFlow 代码集
- ubuntu + oepncv + PCL + realsenseSDK + ROS + OpenVino开发环境搭建
- E:By Elevator or Stairs? CF595 DP最短路
- 2019南昌网络赛 C题,Hello 2019
- mysql libs 冲突_mysql-libs的冲突
- 剑指offer:面试题20. 表示数值的字符串
- 【常用】细数那些常用的linux命令(只针对更新前端代码、上传文件到linux服务器)