IDisposable编程模式剖析



Similar documents
何 秋 琳 张 立 春 视 觉 学 习 研 究 进 展 视 觉 注 意 视 觉 感 知

说 明 为 了 反 映 教 运 行 的 基 本 状 态, 为 校 和 院 制 定 相 关 政 策 和 进 行 教 建 设 与 改 革 提 供 据 依 据, 校 从 程 资 源 ( 开 类 别 开 量 规 模 ) 教 师 结 构 程 考 核 等 维 度, 对 2015 年 春 季 期 教 运 行 基

深圳市新亚电子制程股份有限公司

国债回购交易业务指引

<433A5C446F63756D656E E E67735C41646D696E F725CD7C0C3E65CC2DBCEC4CFB5CDB3CAB9D3C3D6B8C4CFA3A8BCF2BBAFA3A95CCAB9D3C3D6B8C4CF31302D31392E646F63>

I

一 公 共 卫 生 硕 士 专 业 学 位 论 文 的 概 述 学 位 论 文 是 对 研 究 生 进 行 科 学 研 究 或 承 担 专 门 技 术 工 作 的 全 面 训 练, 是 培 养 研 究 生 创 新 能 力, 综 合 运 用 所 学 知 识 发 现 问 题, 分 析 问 题 和 解 决


目 录 关 于 图 标... 3 登 陆 主 界 面... 3 工 单 管 理... 5 工 单 列 表... 5 搜 索 工 单... 5 工 单 详 情... 6 创 建 工 单... 9 设 备 管 理 巡 检 计 划 查 询 详 情 销 售 管

《C语言基础入门》课程教学大纲


( ) 信 号 与 系 统 Ⅰ 学 科 基 础 必 修 课 教 周 2016 年 06 月 13 日 (08:00-09:35) ( )

第2章 数据类型、常量与变量

评 委 : 李 炎 斌 - 个 人 技 术 标 资 信 标 初 步 审 查 明 细 表 序 号 投 标 单 位 投 标 函 未 按 招 标 文 件 规 定 填 写 漏 填 或 内 容 填 写 错 误 的 ; 不 同 投 标 人 的 投 标 文 件 由 同 一 台 电 脑 或 同 一 家 投 标 单

全国建筑市场注册执业人员不良行为记录认定标准(试行).doc

<4D F736F F D C3E6CFF2B6D4CFF3A3A8B5DAC8FDD5C220C0E0CCD8D0D4A3A92E646F63>

,,,,, :,, (.,, );, (, : ), (.., ;. &., ;.. &.., ;, ;, ),,,,,,, ( ) ( ),,,,.,,,,,, : ;, ;,.,,,,, (., : - ),,,, ( ),,,, (, : ),, :,

抗 战 时 期 国 民 政 府 的 银 行 监 理 体 制 探 析 % # % % % ) % % # # + #, ) +, % % % % % % % %

评 委 : 徐 岩 宇 - 个 人 技 术 标 资 信 标 初 步 审 查 明 细 表 序 号 投 标 单 位 投 标 函 未 按 招 标 文 件 规 定 填 写 漏 填 或 内 容 填 写 错 误 的 ; 不 同 投 标 人 的 投 标 文 件 由 同 一 台 电 脑 或 同 一 家 投 标 单

年 第 期 % %! & % % % % % % &

Microsoft Word - 第7章 图表反转形态.doc

Microsoft Word - 文件汇编.doc

登录、注册功能的测试用例设计.doc

修改版-操作手册.doc

马 克 思 主 义 公 正 观 的 基 本 向 度 及 方 法 论 原 则!! # #

<4D F736F F D20B2CEBFBC3232C6DAD1A7CFB0D3EBCBBCBFBCC4DAD2B3>

中 国 软 科 学 年 第 期!!!

龚 亚 夫 在 重 新 思 考 基 础 教 育 英 语 教 学 的 理 念 一 文 中 援 引 的 观 点 认 为 当 跳 出 本 族 语 主 义 的 思 维 定 式 后 需 要 重 新 思 考 许 多 相 连 带 的 问 题 比 如 许 多 发 音 的 细 微 区 别 并 不 影 响 理 解 和

<4D F736F F D20B9D8D3DAB0BABBAAA3A8C9CFBAA3A3A9D7D4B6AFBBAFB9A4B3CCB9C9B7DDD3D0CFDEB9ABCBBE C4EAC4EAB6C8B9C9B6ABB4F3BBE1B7A8C2C9D2E2BCFBCAE92E646F6378>

一 从 分 封 制 到 郡 县 制 一 从 打 虎 亭 汉 墓 说 起

随着执业中医师资格考试制度的不断完善,本着为我校中医学专业认证服务的目的,本文通过对我校中医类毕业生参加2012年和2013年的中医执业医师考试成绩及通过率、掌握率进行分析,并与全国的平均水平进行差异比较分析,以此了解我校执业中医师考试的现状,进而反映我校中医类课程总体教学水平,发现考核知识模块教学中存在的不足,反馈给相关学院和教学管理部门,以此提高教学和管理水平。

教师上报成绩流程图

3 复 试 如 何 准 备 4 复 试 成 绩 计 算 5 复 试 比 例 6 复 试 类 型 7 怎 么 样 面 对 各 种 复 试 04 05

珠江钢琴股东大会


0 年 上 半 年 评 价 与 考 核 细 则 序 号 部 门 要 素 值 考 核 内 容 考 核 方 式 考 核 标 准 考 核 ( 扣 原 因 ) 考 评 得 3 安 全 生 产 目 30 无 同 等 责 任 以 上 道 路 交 通 亡 人 事 故 无 轻 伤 责 任 事 故 无 重 大 质 量

2. 本 次 修 改 后, 投 资 者 申 购 新 股 的 持 有 市 值 要 求 市 值 计 算 规 则 及 证 券 账 户 使 用 的 相 关 规 定 是 否 发 生 了 变 化? 答 : 未 发 生 变 化 投 资 者 申 购 新 股 的 持 有 市 值 是 指, 以 投 资 者 为 单 位

数 学 标 准 不 练 习 1.1 理 解 问 题 并 坚 持 解 决 这 些 问 题 1.2 以 抽 象 和 定 量 方 式 推 理 1.3 建 构 可 行 参 数 和 评 判 他 人 的 推 理 1.4 使 用 数 学 方 法 建 模 1.5 策 略 性 地 使 用 合 适 的 工 具 1.6

Template BR_Rec_2005.dot

¹ º ¹ º 农 业 流 动 人 口 是 指 户 口 性 质 为 农 业 户 口 在 流 入 地 城 市 工 作 生 活 居 住 一 个 月 及 以 上 的 流 动 人 口 非 农 流 动 人 口 是 指 户 口 性 质 为 非 农 户 口 在 流 入 地 城 市 工 作 生 活 居 住 一 个

类 似 地, 又 可 定 义 变 下 限 的 定 积 分 : ( ). 与 ψ 统 称 为 变 限 积 分. f ( ) d f ( t) dt,, 注 在 变 限 积 分 (1) 与 () 中, 不 可 再 把 积 分 变 量 写 成 的 形 式 ( 例 如 ) 以 免 与 积 分 上 下 限 的



<433A5C C6B73625C B746F705CB9FABCCAD6D0D2BDD2A9D7A8D2B5B8DFBCB6BCBCCAF5D6B0B3C6C6C0C9F3C9EAC7EBD6B8C4CFA3A CDA8D3C3B0E6A3A92E646F63>

金 不 少 于 800 万 元, 净 资 产 不 少 于 960 万 元 ; (3) 近 五 年 独 立 承 担 过 单 项 合 同 额 不 少 于 1000 万 元 的 智 能 化 工 程 ( 设 计 或 施 工 或 设 计 施 工 一 体 ) 不 少 于 2 项 ; (4) 近 三 年 每 年

世华财讯模拟操作手册

·岗位设置管理流程

HSK( 一 级 ) 考 查 考 生 的 日 常 汉 语 应 用 能 力, 它 对 应 于 国 际 汉 语 能 力 标 准 一 级 欧 洲 语 言 共 同 参 考 框 架 (CEF) A1 级 通 过 HSK( 一 级 ) 的 考 生 可 以 理 解 并 使 用 一 些 非 常 简 单 的 汉 语

在2012年工作会议结束时的讲话

名 称 生 命 科 学 学 院 环 境 科 学 1 生 物 学 仅 接 收 院 内 调 剂, 初 试 分 数 满 足 我 院 生 物 学 复 试 最 低 分 数 线 生 命 科 学 学 院 生 态 学 5 生 态 学 或 生 物 学 生 命 科 学 学 院

18 上 报 该 学 期 新 生 数 据 至 阳 光 平 台 第 一 学 期 第 四 周 至 第 六 周 19 督 促 学 习 中 心 提 交 新 增 专 业 申 请 第 一 学 期 第 四 周 至 第 八 周 20 编 制 全 国 网 络 统 考 十 二 月 批 次 考 前 模 拟 题 第 一 学

一 六 年 级 下 册 教 科 书 总 体 说 明 ( 一 ) 教 学 内 容 本 册 教 科 书 一 共 安 排 了 5 个 教 学 单 元, 其 中 前 4 个 单 元 为 新 知 识, 第 五 单 元 是 对 整 个 小 学 阶 段 所 学 数 学 知 识 系 统 的 整 理 和 复 习

4 进 入 交 互 区 设 置 的 组 件 管 理, 在 组 件 管 理 中, 教 师 可 以 选 择 课 程 空 间 中 的 所 有 组 件, 并 通 过 点 击 启 用 或 不 启 用 选 定 组 件 在 课 程 空 间 中 的 显 示 5 进 入 工 作 室 管 理 的 工 作 室 首 页,

自 服 务 按 钮 无 法 访 问 新 系 统 的 自 服 务 页 面 因 此 建 议 用 户 从 信 网 中 心 ( 主 页, 右 下 角 位 置 的 常 用 下 载, 或 校 园 网 用 户 自 服 务 ( 首 页

云信Linux SSH认证代理用户手册

上海证券交易所会议纪要

 编号:

目 录 第 一 章 博 星 卓 越 电 子 商 务 营 销 策 划 实 践 平 台 硬 件 使 用 介 绍... 3 第 二 章 博 星 卓 越 电 子 商 务 营 销 策 划 实 践 平 台 管 理 员 端 功 能 使 用 介 绍 系 统 管 理 员 登 陆 班

untitled

2 熟 悉 Visual Basic 的 集 成 开 发 环 境 3 了 解 可 视 化 面 向 对 象 编 程 事 件 驱 动 交 互 式 开 发 等 基 本 概 念 4 了 解 Visual Basic 的 特 点 环 境 要 求 与 安 装 方 法 1 Visual Basic 开 发 应 用

2014年中央财经大学研究生招生录取工作简报


一 开 放 性 的 政 策 与 法 规 二 两 岸 共 同 的 文 化 传 承 三 两 岸 高 校 各 自 具 有 专 业 优 势 远 见 杂 志 年 月 日

证券代码: 证券简称:长城电脑 公告编号:

黄 金 原 油 总 持 仓 增 长, 同 比 增 幅 分 别 为 4.2% 和 4.1% 而 铜 白 银 以 及 玉 米 则 出 现 减 持, 减 持 同 比 减 少 分 别 为 9.4%,9.4% 以 及 6.5% 大 豆, 豆 粕 结 束 连 续 4 周 总 持 仓 量 增 长, 出 现 小 幅

课程类 别

全国教师资格认定管理信息系统

西 南 民 族 学 院 学 报 哲 学 社 会 科 学 版 第 卷 资 料 来 源 中 国 统 计 年 鉴 年 年 新 中 国 五 十 年 统 计 资 料 汇 编 中 国 人 口 统 计 年 鉴 年 数 据 资 料 来 源 中 国 统 计 年 鉴 中 国 统 计 出 版 社 年 版 资 料 来 源

3 月 30 日 在 中 国 证 券 报 上 海 证 券 报 证 券 时 报 证 券 日 报 和 上 海 证 券 交 易 所 网 站 上 发 出 召 开 本 次 股 东 大 会 公 告, 该 公 告 中 载 明 了 召 开 股 东 大 会 的 日 期 网 络 投 票 的 方 式 时 间 以 及 审


定 位 和 描 述 : 程 序 设 计 / 办 公 软 件 高 级 应 用 级 考 核 内 容 包 括 计 算 机 语 言 与 基 础 程 序 设 计 能 力, 要 求 参 试 者 掌 握 一 门 计 算 机 语 言, 可 选 类 别 有 高 级 语 言 程 序 设 计 类 数 据 库 编 程 类

三门峡市质量技术监督局清单公示

采 取 行 动 的 机 会 90% 开 拓 成 功 的 道 路 2


工 程 造 价 咨 询 企 业 管 理 系 统 操 作 手 册 目 录 1 造 价 企 业 登 录 企 业 基 本 信 息 查 看 企 业 人 员 信 息 查 看 企 业 基 本 信 息 操 作 企 业 简 介 企 业 章

目 录 一 系 统 访 问... 1 二 门 户 首 页 申 报 用 户 审 核 用 户... 2 三 系 统 登 录 用 户 名 密 码 登 录 新 用 户 注 册 用 户 登 录 已 注 册 用


2006年顺德区高中阶段学校招生录取分数线


伊 犁 师 范 学 院 611 语 言 学 概 论 全 套 考 研 资 料 <2016 年 最 新 考 研 资 料 > 2-2 语 言 学 纲 要 笔 记, 由 考 取 本 校 本 专 业 高 分 研 究 生 总 结 而 来, 重 点 突 出, 借 助 此 笔 记 可 以 大 大 提 高 复 习 效

工 程 勘 察 资 质 标 准 根 据 建 设 工 程 勘 察 设 计 管 理 条 例 和 建 设 工 程 勘 察 设 计 资 质 管 理 规 定, 制 定 本 标 准 一 总 则 ( 一 ) 本 标 准 包 括 工 程 勘 察 相 应 专 业 类 型 主 要 专 业 技 术 人 员 配 备 技 术

境 外 上 市 外 资 股 股 东 持 有 股 份 总 数 (H 股 ) 489,157,907 3 出 席 会 议 的 股 东 所 持 有 表 决 权 股 份 数 占 公 司 有 表 决 权 股 份 总 数 的 其 中 :A 股 股 东 持 股 占 股 份 总 数 的

!!!!!!!!!!

第1篇 道路桥梁工程技术核心专业课程标准及学习绩效考评体系

思 想 政 治 理 论 经 核 查 无 误 思 想 政 治 理 论 经 核 查 无 误 思 想 政 治 理 论 经 核 查 无 误 思 想

上海证券交易所会议纪要

抗 日 战 争 研 究! 年 第 期 # # # # #!!!!!!!! #!!

一、资质申请

际 联 考 的 非 美 术 类 本 科, 提 前 批 本 科 体 育 类 第 一 批 第 二 批 第 三 批 的 理 工 类 和 文 史 类 本 科 平 行 志 愿, 考 生 可 以 填 报 6 所 院 校 志 愿 符 合 贫 困 地 区 专 项 计 划 和 农 村 考 生 专 项 计 划 报 考

<4D F736F F D20C6F3D2B5C5E0D1B5CAA6B9FABCD2D6B0D2B5B1EAD7BC2E646F63>

IntelBook_cn.doc

物 流 从 业 人 员 职 业 能 力 等 级 证 书 分 为 四 个 级 别, 分 别 为 初 级 助 理 级 中 级 和 高 级 ; 采 购 从 业 人 员 职 业 能 力 等 级 证 书 分 为 三 个 级 别, 分 别 为 中 级 高 级 和 注 册 级 请 各 有 关 单 位 按 照 通

第 期 李 伟 等 用 方 法 对 中 国 历 史 气 温 数 据 插 值 可 行 性 讨 论

合 并 计 算 配 售 对 象 持 有 多 个 证 券 账 户 的, 多 个 证 券 账 户 市 值 合 并 计 算 确 认 多 个 证 券 账 户 为 同 一 配 售 对 象 持 有 的 原 则 为 证 券 账 户 注 册 资 料 中 的 账 户 持 有 人 名 称 有 效 身 份 证 明 文 件

抗 日 战 争 研 究 年 第 期

正 规 培 训 达 规 定 标 准 学 时 数, 并 取 得 结 业 证 书 二 级 可 编 程 师 ( 具 备 以 下 条 件 之 一 者 ) (1) 连 续 从 事 本 职 业 工 作 13 年 以 上 (2) 取 得 本 职 业 三 级 职 业 资 格 证 书 后, 连 续 从 事 本 职 业

<443A5C6D B5C30312EB9A4D7F7CEC4B5B55C30322EBACFCDACCEC4B5B55C C30342EC8CBC9E7CCFC5C31332ECFEEC4BFC5E0D1B55C E30385C322EB2D9D7F7CAD6B2E12E646F63>

附件1:

学 年 第 二 学 期 集 中 考 试 安 排 (18 周 ) 考 试 日 期 :6 月 27 日 星 期 一 8:10-9:50 第 二 公 共 教 学 楼 A 区 A 高 等 数 学 ( 理 二 2) 复 材 材 料 科 学 与 工 程

徐天宏:《基因天堂》.doc

Transcription:

对 象 的 生 存 期 北 京 理 工 大 学 计 算 机 学 院 金 旭 亮

概 述 万 物 有 生 必 有 死, 类 似 地, 面 向 对 象 软 件 系 统 中 的 对 象, 既 然 是 对 现 实 世 界 的 一 种 模 拟, 必 然 也 存 在 着 生 死 问 题 对 象 的 生 与 死, 在 面 向 对 象 的 理 论 中, 称 为 对 象 的 生 存 期 问 题 2014/10/19 2 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程

一 对 象 的 创 建

对 象 的 创 建 与 销 毁 所 有 的 面 向 对 象 编 程 语 言, 都 必 然 会 提 供 特 定 的 关 键 字 或 手 段 创 建 一 个 对 象 以 C++/Java/C# 为 例, 都 是 使 用 new 关 键 字 创 建 对 象 的 对 象 创 建 以 后, 通 常 会 使 用 某 个 变 量 保 存 它 的 引 用, 这 个 变 量 可 视 为 它 所 引 用 对 象 的 名 字, 在 后 面 的 代 码 中 通 过 这 个 名 字 访 问 对 象 2014/10/19 4 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程

对 象 的 创 建 构 造 函 数 Demo(Constructor): 类 的 构 造 函 数 public class MyClass public MyClass() public MyClass(string info) 一 个 类 可 以 有 多 个 构 造 函 数, 这 些 构 造 函 数 构 成 重 载 (overload) 关 系 在 程 序 实 际 运 行 时, 依 据 参 数 决 定 调 用 哪 个 构 造 函 数 2014/10/19 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程 4

对 象 注 入 对 象 之 间 的 相 互 协 作 关 系 是 非 常 常 见 的, 比 如 类 A 要 用 到 类 B 的 功 能 在 实 际 开 发 中, 我 们 经 常 使 用 一 种 对 象 注 入 (Object Inject) 的 对 象 构 造 方 法 达 到 目 的 对 象 注 入 定 义 一 个 类 B 类 A 需 要 使 用 类 B, 它 在 内 部 用 一 个 私 有 字 段 保 存 外 部 注 入 的 B 对 象 的 引 用 2014/10/19 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程 6

实 际 开 发 中 推 荐 的 对 象 注 入 方 式 将 类 A 要 使 用 的 功 能 抽 象 为 接 口, 类 B 实 现 这 一 接 口, 然 后 在 运 行 时 动 态 地 将 类 B 的 实 例 注 入 // 定 义 一 个 接 口 interface MyInterface (1) (2) // 类 B 实 现 这 一 接 口 class B:MyInterface // 在 创 建 A 时, 动 态 注 入 一 个 B 对 象 A obj = new A(new B()); // 类 A 通 过 接 口 调 用 特 定 功 能 class A private MyInterface innerobj; public A(MyInterface obj) innerobj = obj; (3) (4) 2014/10/19 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程 7

对 象 注 入 的 真 实 案 例 JDK 中 的 流 (Stream) 普 通 采 用 对 象 注 入 的 方 式, 请 看 以 下 Java 示 例 代 码 FileInputStream fin=new FileInputStream( 文 件 名 ); DataInputStream din=new DataInputSteam(fin); Double s=din.readdouble(); 说 明 : 1. 上 述 这 种 代 码 创 建 的 流 对 象 首 尾 相 接, 称 为 流 对 象 链, 链 尾 的 流 对 象 是 程 序 中 真 正 用 到 的 流 对 象 2. FileInputStream 只 提 供 基 本 的 以 字 节 为 单 位 的 读 写 功 能, 而 DataInputStream 提 供 了 向 流 中 写 入 常 用 数 据 类 型 ( 如 int,char,double 等 ) 的 能 力 3. 这 实 际 上 是 一 种 设 计 模 式, 称 为 Decorator 2014/10/19 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程 8

再 来 看 另 一 个 场 景 在 实 际 开 发 中, 我 们 有 时 希 望 某 个 类 仅 允 许 创 建 一 个 实 例 ( 比 如 用 于 保 存 系 统 配 置 参 数 的 对 象 整 个 程 序 就 只 需 一 个, 在 程 序 初 始 时 创 建 它, 以 后 就 是 只 读 的 ), 怎 样 做 到 这 点? 一 个 最 简 单 的 方 法, 就 是 : 给 类 源 码 或 程 序 文 档 附 加 一 条 注 释, 告 诉 使 用 这 个 类 的 程 序 员, 在 整 个 程 序 生 命 周 期 中, 只 能 调 用 new 一 次 以 创 建 唯 一 的 对 象 很 明 显, 这 种 方 法 是 不 靠 谱 的 有 没 有 更 好 的 方 法? 2014/10/19 9 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程

解 决 问 题 的 技 术 关 键 点 当 一 个 类 的 构 造 方 法 是 私 有 的 时, 外 界 将 无 法 使 用 new 关 键 字 创 建 它 的 实 例 : 使 用 new 无 法 创 建 MyClass 对 象 那 么, 外 界 如 何 获 取 这 个 唯 一 的 对 象 呢? 2014/10/19 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程 10

使 用 静 态 成 员 解 决 前 面 提 出 的 问 题 我 们 可 以 设 置 一 个 私 有 静 态 字 段, 引 用 唯 一 的 那 个 对 象, 再 设 计 一 个 公 有 静 态 方 法, 强 制 外 界 只 能 通 过 调 用 此 静 态 方 法 才 能 获 取 这 个 唯 一 的 内 部 对 象 的 引 用 OnlyYou -obj : OnlyYou = null -OnlyYou() +GetOnlyYou() : OnlyYou 2014/10/19 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程 11

上 面 的 代 码 中 似 乎 还 有 问 题 请 考 虑 多 线 程 的 运 行 环 境 线 程 一 线 程 二 线 程 一 首 先 得 到 机 会 运 行, 它 检 查 obj, 发 现 其 为 null, 于 是 执 行 new 创 建 对 象 但 是, 此 对 象 的 构 造 方 法 还 未 返 回 时, 线 程 二 得 到 机 会 开 始 执 行, 它 检 查 obj, 此 时 obj 仍 然 还 是 null 结 果 是 什 么? 好 像 情 况 不 太 妙 啊! 2014/10/19 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程 12

多 线 程 问 题 解 决 方 案 -1 加 锁 解 决 问 题 使 用 CLR 支 持 的 同 步 方 法 特 性 这 两 种 方 案 都 具 有 对 象 延 迟 创 建 的 特 性, 这 就 是 说 : 只 有 在 需 要 时 才 创 建 对 象 如 果 允 许 提 前 创 建 对 象, 那 我 们 还 有 更 为 稳 妥 的 实 现 方 案 2014/10/19 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程 13

多 线 程 问 题 解 决 方 案 -2 使 用 类 的 静 态 构 造 函 数, 在 整 个 程 序 的 生 命 周 期 中, 类 的 静 态 构 造 函 数 仅 会 被 调 用 一 次.NET 虚 拟 机 (CLR) 保 证 这 个 方 法 仅 会 被 执 行 一 次 其 执 行 时 机 是 此 类 中 的 任 何 一 个 成 员 被 第 一 次 访 问 时 2014/10/19 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程 14

二 对 象 的 销 毁

对 象 的 销 毁 当 需 要 销 毁 对 象 时,C++ 提 供 了 一 个 delete 关 键 字 显 式 地 销 毁 对 象 并 回 收 其 占 用 的 内 存 Java/C# 与 C++ 不 一 样, 它 采 用 了 一 种 隐 式 回 收 的 方 式 销 毁 对 象 2014/10/19 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程 16

Java/C# 中 的 垃 圾 收 集 机 制 在 Java/C# 程 序 中, 你 new 了 一 个 对 象 之 后, 就 可 以 不 管 它 了 JVM/CLR 都 有 一 个 特 殊 的 机 制 垃 圾 收 集 (Garbage Collection) 来 负 责 对 象 的 回 收 当 JVM/CLR 发 现 内 存 紧 张 时, 会 启 动 一 个 线 程 完 成 GC 工 作,GC 线 程 会 扫 描 当 前 时 刻 应 用 程 序 创 建 的 所 有 对 象, 找 出 那 些 超 出 作 用 域 的 己 不 再 使 用 的 对 象, 销 毁 它 们, 回 收 其 占 用 的 资 源 2014/10/19 17 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程

主 动 探 索 JVM/CLR 所 提 供 的 对 象 自 动 回 收 机 制, 大 大 地 减 轻 了 程 序 员 的 负 担, 有 助 于 提 升 开 发 效 率 和 代 码 质 量 ( 对 C++ 程 序 的 统 计 表 明, 大 多 数 BUG 都 与 指 针 误 用 和 对 象 销 毁 相 关 ) 毫 无 疑 问, 在 虚 拟 机 中 引 入 GC 机 制, 必 然 会 占 用 部 分 的 系 统 资 源 为 了 将 这 种 影 响 限 制 于 一 个 比 较 合 理 的 范 围 之 内,Java 和.NET 虚 拟 机 都 精 心 设 计 了 垃 圾 收 集 算 法 请 感 兴 趣 的 同 学 通 过 互 联 网 搜 索 相 关 资 料, 看 看 这 些 算 法 是 怎 样 设 计 出 来 的 2014/10/19 18 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程

C#/Java 中 的 析 构 方 法 C++ 可 以 为 类 定 义 一 个 析 构 方 法, 当 对 象 被 销 毁 时, 此 析 构 方 法 被 调 用 Java/C# 中 存 在 类 似 的 特 性 C# Java C# 类 的 析 构 方 法, 实 际 上 是 重 写 了 基 类 的 Finalize() 方 法, 编 译 器 在 编 译 上 述 代 码 的 时 会 生 成 一 条 调 用 此 Finalize() 方 法 的 指 令 Java 允 许 子 类 重 写 Object.finalize() 方 法, 在 Object.finalize() 方 法 源 代 码 的 注 释 中, 详 细 介 绍 了 相 关 的 技 术 细 节 2014/10/19 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程 19

动 手 动 脑 class MyClass ~MyClass() // 析 构 函 数 // 编 写 代 码 释 放 非 托 管 的 资 源 使 用.NET 所 提 供 的 ildasm 工 具 反 汇 编 左 边 的 这 个 类 编 译 出 来 的 程 序 集 (exe 或 dll), 可 以 看 到 以 下 类 似 的 结 果, 请 动 手 一 试 2014/10/19 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程 20

关 于 C# 与 Java 的 析 构 方 法 在 实 际 开 发 中, 不 建 议 重 写 类 的 析 构 方 法, 其 主 要 原 因 在 于 这 个 方 法 的 调 用 时 机 是 由 虚 拟 机 的 GC 机 制 决 定 的, 应 用 程 序 开 发 者 无 法 确 认 这 个 方 法 一 定 在 特 定 的 时 机 被 调 用, 甚 至 不 敢 保 证 一 定 会 被 调 用 析 构 方 法 的 主 要 作 用 是 回 收 资 源, 但 为 了 实 现 这 一 目 的, 不 用 析 构 方 法 也 行, 只 需 定 义 另 一 个 诸 如 Dispose/Close() 之 类 的 方 法 显 式 回 收 资 源 即 可 下 面 的 PPT 中, 将 介 绍 C# 中 用 于 回 收 资 源 的 Disposal 设 计 模 式 2014/10/19 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程 21

关 于 析 构 方 法 析 构 函 数 存 在 的 主 要 目 的 是 释 放 非 托 管 的 资 源 当 CLR 的 垃 圾 收 集 线 程 要 回 收 一 个 定 义 了 析 构 方 法 的 对 象 时, 它 会 自 动 调 用 其 Finalize 方 法 假 设 子 类 定 义 了 析 构 方 法, 但 基 类 没 有 定 义, C# 编 译 器 所 采 取 的 策 略 它 会 跳 过 这 个 基 类 去 检 查 更 上 一 层 的 基 类 是 否 定 义 了 析 构 函 数, 如 果 有 则 调 用 之, 否 则 直 接 调 用 Object 类 的 Finalize 方 法 除 了 析 构 方 法,.NET 中 我 们 还 有 另 一 个 与 资 源 回 收 密 切 相 关 的 东 西 IDisposable 接 口 2014/10/19 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程 22

使 用 IDisposable 接 口 public interface IDisposable void Dispose(); class MyClass : IDisposable ~MyClass() Dispose(); public void Dispose() // 编 写 代 码 释 放 所 占 用 的 资 源 2014/10/19 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程 23

揭 秘 C# 中 的 using 关 键 字 using (MyClass obj = new MyClass()) // 使 用 obj 干 活 C# 编 译 器 在 编 译 包 容 using 关 键 字 的 代 码 时, 其 实 是 按 照 以 下 代 码 模 板 进 行 编 译 的 使 用 using 关 联 字 时, 它 所 关 联 的 对 象 必 须 实 现 IDisposable 接 口 MyClass obj = new MyClass(); try // 使 用 obj 干 活 finally IDisposable disposable = obj as IDisposable; if (obj!= null) obj.dispose(); // 释 放 资 源 2014/10/19 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程 24

析 构 方 法 与 Dispose() 方 法 类 的 析 构 方 法 通 常 用 于 清 理 非 托 管 的 资 源, 而 IDisposable 接 口 所 定 义 的 Dispose() 方 法, 则 可 以 同 时 清 理 托 管 和 非 托 管 的 资 源 只 有 类 需 要 提 供 一 个 在 应 用 程 序 中 可 随 时 调 用 的 显 式 清 理 所 占 用 资 源 的 功 能 时, 才 需 要 实 现 IDisposable 接 口 在 实 际 开 发 中, 应 注 意 不 管 资 源 是 否 己 经 被 释 放, 实 现 的 Dispose() 方 法 都 应 该 能 被 安 全 地 调 用 多 次, 不 要 让 使 用 这 个 类 的 程 序 员 去 操 心 到 底 调 用 了 多 少 次 Dispose() 方 法, 反 复 释 放 资 源 会 不 会 弄 出 什 么 问 题 2014/10/19 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程 25

IDisposable 编 程 模 式 代 码 框 架 class MyClass : IDisposable ~MyClass() Dispose(false); public void Dispose() Dispose(true); // 将 导 致 所 有 资 源 被 释 放 // 不 需 要 再 调 用 本 对 象 的 Finalize() 方 法 了 GC.SuppressFinalize(this); protected virtual void Dispose(bool disposing) if (disposing) // 清 理 托 管 的 资 源 // 清 理 非 托 管 资 源 2014/10/19 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程 26

真 实 案 例 分 析 FileStream private SafeFileHandle _handle; ~FileStream() if (this._handle!= null) this.dispose(false);.net 基 类 库 中 FileStream 类 既 重 写 了 析 构 方 法, 又 实 现 了 IDisposable 接 口, 这 里 展 示 了 它 的 关 键 代 码 注 意 FileStream 需 要 调 用 基 类 的 Dispose() 方 法 protected override void Dispose(bool disposing) try if ( this._handle!= null &&!this._handle.isclosed && ) this.flushwrite(!disposing); finally if ((this._handle!= null) &&!this._handle.isclosed) this._handle.dispose(); // base.dispose(disposing); 2014/10/19 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程 27

真 实 案 例 分 析 Stream public void Dispose() this.close(); public virtual void Close() this.dispose(true); GC.SuppressFinalize(this); FileStream 派 生 自 Stream, 这 里 是 其 基 类 Stream 中 与 资 源 回 收 相 关 的 关 键 代 码 注 意 与 前 页 PPT 结 合 起 来 看, 因 为 其 子 类 FileStream 调 用 了 基 类 Stream 的 相 关 方 法 protected virtual void Dispose(bool disposing) if (disposing && (this._asyncactiveevent!= null)) this._closeasyncactiveevent( ); 2014/10/19 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程 28

学 以 致 用 请 用 C# 或 Java 编 写 一 个 GUI 程 序, 其 窗 体 如 下 所 示 : 功 能 描 述 : 每 次 点 击 第 一 个 按 钮, 都 会 在 屏 幕 上 出 现 一 个 新 窗 体 当 创 建 了 多 个 新 窗 体 之 后, 点 击 第 二 个 按 钮, 所 有 这 些 窗 体 都 会 被 关 闭 思 索 以 下 问 题 : 如 果 用 户 关 闭 了 其 中 的 某 个 或 某 几 个 窗 体, 程 序 应 该 如 何 处 理 这 种 情 况? 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程 29

小 结 对 象 的 生 存 期 是 面 向 对 象 软 件 开 发 中 的 一 个 重 要 问 题, 本 讲 围 绕 着 这 点 而 展 开, 其 重 点 内 容 如 下 : 1. 对 象 注 入 的 编 程 方 法 2. 静 态 成 员 的 多 线 程 安 全 3. IDisposable 编 程 模 式 有 关 对 象 生 存 期 问 题, 在 后 面 介 绍 各 种 面 向 对 象 技 术 框 架 时 还 会 涉 及 到 开 发 中 务 必 注 意 它 下 一 讲, 我 们 将 介 绍 面 向 对 象 编 程 中 的 另 一 个 重 要 知 识 点 多 态 2014/10/19 金 旭 亮 面 向 对 象 软 件 开 发 实 践 课 程 30