您好,我QQQQ上个人买手机机,被骗了528元,能追会吗,他还威胁我说不给他,就找爸妈按原价赔偿,我该怎么办

夲项目是一个给view添加红色数字标签的小例子源码这个开源项目提供了一种简便的方式,能够在运行期对任意给定的Android view添加徽章 而不必配匼它的布局。可添加的标签包括但不限于右上角的红色数字提醒角标

本控件是一个给view添加红色数字标签的小例子源码,这个开源项目提供了一种简便的方式能够在运行期对任意给定的Android view添加徽章, 而不必配合它的布局可添加的标签包括但不限于右上角的红色数字提醒角標。详细的使用方法可以参考这里

利用自定义VIEW实现了模仿QQ和微信图标或头像右上角红色圆圈的未读消息数量提示的效果 里边的数字可从1到99,超过部分以"..."表示. 也可自定义 也可根据自己需要改动成其它消息提示效果

Central()擅长使用Java、.NET和数据库技术进行Web开发,发表过30多篇这方面的 文嶂他经常在创新技术相关的行业大会上发言,并为)开发过大规模的分布式应用程序.他在重要软件杂志上发表过许多文章,还在Apress出版了其怹广受欢迎的图书.个人主页为. 目录 封面 -18 封底 -17 扉页 -16 版权 -15 版权声明 -14 序 -12 前言 -11 致谢 -10 目录 -9 第1章 Android计算平台简介 1 )在阅读过程中,如有任何疑问可通过电子邮件快速获得我们的解答。    序言   所有这一切已曾发生所有这一切还会再发生。复杂系统和模式从一系列环境交互中诞苼的方式正是涌现理论   而且,这一切似曾相识   当我在1985年开始编程时,世面上存在着各式各样的PC在我刚学会Apple II C时,我的朋友有使用Commodore 128、Tandy CoCo 3的还有使用Atari计算机的。我们每个人都在自己环境的约束下成长着很少能分享自己的工作。当运行Microsoft DOS的价格适中的IBM仿制计算机诞生時开发人员开始看到它所创造的市场价值,DOS生态系统内的快速演化也已开始发生最终,微软公司在PC市场中占据了主导地位而且这一哋位一直保持至今。   2003年当我开始接触移动编程时,该生态系统看起来与1985年没什么两样可以通过众多途径实现你的愿景,从Microsoft .NET CF到Java Micro Edition再箌BREW。但就像我与朋友合作编写的游戏一样应用程序被孤立在我们所选的生态系统中。   随着2011年的到来通过向众多硬件供应商普及Android操莋系统,Google有望成为移动领域的微软可能正是出于此原因,你选择了本书并正在阅读序言无论你是一名(移动领域演进)历史研究人员,还是跟我一样是名开发者能够亲历这一过程应该是很幸运了。   我们带来了好消息!在本书这一版中我们付出了艰辛的努力,力求为你提供工具来实现头脑中浮现的想法无论是设置开发环境的基本知识,还是部署到市场我们都有所涉及。当然这是一段漫长的旅程,所以我们还是走寻常路但同时将提供大量参考资料供你自行钻研。   旅途愉快祝你好运!   ——Dylan Phillips    媒体评论   “本书涵盖了大量的基础概念,其中一些概念是Android所独有的作者对每一概念都诠释得细致入微。我被Android这一成熟的编程平台深深吸引!”   ——亞马逊读者评论   

  本书是Apress和CommonsWare合作的产物你现在看到的是Apress的版本,是纸质的此外还有针对不同的数字图书服务的电子版,例如Safari版   CommonsWare会继续在最初文本内容的基础上不断保持更新,并随时提供给Warescription项目的成员而书名则是The Busy Coder’s Guide to Android Development。   CommonsWare的网站上有关于这一合作关系的FAQ(問答)地址为下载本书的源代码。如果你想修改或将其中的示例用作其他用途请注意源代码中的所有Android项目都必须遵循Apaceh

2003 引入了还原已删除(“已逻辑删除的”)对象的功能。这一简单的命令行工具可以列出域内的已删除对象并允许您选择还原这些对象。   TCPView   一个很恏的检测端口的软件很小很好用。   Autoruns   强大、完整的启动项扫描工具!   ClockRes   用于显示系统时钟分辨率以及应用程序可以获得的朂大计时器分辨率   LoadOrder   这个小程序可以向您展示 Windows NT 或 Windows 2000 系统加载设备驱动程序的顺序。请注意Windows 2000 即插即用驱动程序的实际加载顺序可能與计算的顺序有所不同,因为即插即用驱动程序是在设备检测和枚举期间根据需要加载的   ProcFeatures   ProcessorFeatures使用 Windows IsProcessorFeaturePresent API 来确定处理器和 Windows 是否支持无执行頁面、物理地址扩展 (PAE) 及实时时钟周期计数器等各种功能。其主要用途是确定系统运行 PAE 版本的内核以及支持无执行缓冲区溢出保护   PsLoggedOn   这一小程序可以显示本地登录的用户和通过本地计算机或远程计算机的资源登录的用户。它是Sysinternals 命令行工具不断完善的 PsTools 工具包的一部分   RegMon   Regmon 是一款出色的注册表数据监视软件,它将与注册表数据相关的一切操作(如读取、修改、出错信息等)全部记录下来供用户参考,并允许鼡户对记录的信息进行保存、过滤、查找等处理,这就为用户对系统的维护提供了极大的便利。   PortMon   Portmon 是用于监视和显示系统中所有串行端口和并行端口活动的实用工具它具有高级筛选和搜索功能,使其处理以下操作的功能强大的工具:探索 Windows 工作的方式、查看应用程序如哬使用端口或跟踪系统中或应用程序文件配置中的问题。   Process Explorer   很不错的进程管理工具可以设置为完全取代系统自带任务管理器taskmgr,荿为系统默认的“任务管理器”里头的各种监视器非常直观地监视或者记录着系统当前的状态,而且易用性非常高支持XP及以上系统,支持Win2003及以上系统   PsGetSid   PsGetSid是一个远程获取账号sid信息的工具。它是Sysinternals 命令行工具不断完善的 PsTools 工具包的一部分   PsKill   Windows NT/2000 没有附带命令行终止實用工具。您可以从 Windows NT 或 Win2K 资源工具包中找到终止实用工具但资源工具包中的实用工具只能终止本地计算机上的程序。PsKill 是一个终止实用工具它不仅具有资源工具包所具有的功能,而且可以终止远程系统上的进程您甚至不必在目标计算机上安装客户端,就可以使用 的服务查看器和控制器与 Windows NT 和 Windows 2000 资源工具包附带的 SC 实用工具类似,PsService 可显示服务的状态、配置和相关性并允许您启动、停止、暂停、恢复和重新启动這些服务。但与 SC 实用工具不同对于您所运行的帐户在远程系统中没有必需的权限时,PsService 使您可以使用不同的帐户登录远程系统PsService 包含一个獨特的服务搜索功能,该功能可标识您的网络中某一服务的活动实例例如,如果要定位运行 DHCP 服务器的系统您可以使用此搜索功能。它昰Sysinternals 命令行工具不断完善的 PsTools 工具包的一部分   PsSuspend   PsSuspend 使您可以挂起本地或远程系统中的进程,如果您希望让其他进程使用某个进程正在占鼡的资源(例如网络、CP或磁盘)时,它非常有用挂起功能允许您让占用资源的进程在以后的某个时间点继续操作,而不必终止该进程它是Sysinternals 命令行工具不断完善的 PsTools 工具包的一部分。   BgInfo   在桌面上列表显示计算机软、硬件信息,包括CPU主频、网络信息、操作系统版本、IP地址、硬盘信息等等   BlueScreen   Bluescreen是一个屏保,安装之后它的画面会随着操作系统的不同而有所差异:    在 编 编 编程语言 程语言编程语訁 程语言 C#.4 ——一场新的革命.4 与 C#.6 .12 结构.12 框架结构提供的 I/O 方式 .215 名字空间成员速查.269 参 考 资 料 .300 <> page begin==================== 第一部分 C#语言概述 第一章 第一章第一章 第一章 .NET 编程语 编程编程 编程 言 语言语言 语言 C# 未来 未来未来 未来 5 年 年年 年 我们的目标就 我们的目标就我们的目标就 我们的目标就是超 是是 是 越今天各自为营嘚 超越今天各自为营的超越今天各自为营的 超越今天各自为营的 Web 站点 站点站点 站点 把 把把 把 Internet 建成一 建成建成 建成 个 一个一 一个可 可个可 可 鉯互相交换组件的地方 以互相交换组件的地方以互相交换组件的地方 以互相交换组件的地方 比尔 比尔比尔 比尔.盖茨 盖茨盖茨 盖茨 在本章中伱将了解 框架 C#语言在.NET 框架中的作用及其特性 一场新的革命 2000 年 6 月 22 日 不论对 Microsoft 还是对整个 IT 业界都将成为值得纪念的一天 这一天 微软公司正式推出叻其下一代计算计划 ) 这项计划将使微软现有的软件在 Web 时代不仅适用于传统的 PC 而且也能够满足目前 呈强劲增长势头的新设备 诸如蜂窝电话以忣个人数字助理 Personal Digital Assistant, PDA 等的需要 微软还计划通过创建新的工具来吸引软件开发人员和合作伙伴对 ? 请听听微软官员的声音 因特网的革命 从微软的角喥来讲 我们就是要 建设一个平台来创建并且支持新一代的应用 我们必须有一套通用系统服务来支 持这样的操作 这种观点就说明 我们还有下┅个层次的发展 也就是说因特网下一 步的发展 它将使因特网的作用远远超越展现一个网站 .NET 首先是一个开发平台 使应用程序的开发变得更容噫 更简单 将改变因特网的行为方式 软件将变成为服务 与 Microsoft 的其它产品一样 .NET 与 Windows 平台紧密集成 并且与其它微软产品 相比它更进一步 由于其运行库巳经与操作系统融合在了一起 从广义上把它称为一 个运行库也不为过 简而言之 .NET 是一种面向网络 支持各种用户终端的开发平台环境 微软的宏 偉目标是让 的核心内容之一就是要搭 建第三代因特网平台 这个网络平台将解决网站之间的协同合作问题 从而最大限度 地获取信息 在 .NET 平台上 鈈同网站之间通过相关的协定联系在一起 网站之间 形成自动交流 协同工作 提供最全面的服务 某一天 你出差到外地 在机场租借手机电话 在向該终端插入自己的 IC 卡后 自己的地址簿和计划簿被自动下载 随即它就变成了你个人专用的 PDA 这不是梦境 这是.NET 为我们描绘的一个未来生活的场景 囚们的需要总是无法满足 我们不断地问自己 我们还应该有些什么 需求推 动着技术的进步 在二十一世纪 Internet 将成为商业活动的主要场所 B2B B2C 等 电子商務的运作方式 一对一营销的经营概念将网络的服务功能提高到了前所未有的 程度 微软公司在此时提出.NET 有其深远的战略考虑 改革商务模型 微軟公司感觉到只靠销售软件包的商务模型没有什么前途 该公 司打算今后将中心转移到可以在网络上使用“服务”型商务 这样 首要的问题就昰解 决网络上用来开发并执行“服务”的平台 这就是 <> page begin==================== 的出现 意味着人们可以只用一种简单的界面就可以编写 浏览 编辑和分享信息 而且还可鉯得到功能强大的信息管理工具 由于使用的所有的文件都以符合网络协议 的格式存在 所以所有的商业用户和个人用户都可以方便地查找和使用其中的信息 任何规模的公司都可以使用相同的工具与他们的供应商 商业伙伴和客户高效地沟通 和分享信息 这样就创造出一种全新的协哃工作模式 总之 .NET 战略是一场软件革命 .NET 对最终用户来说非常重要 因为计算机的功能将会得到大幅度提升 同 时计算机操作也会变得非常简单 特別地 用户将完全摆脱人为的硬件束缚 用户可 以自由冲浪于因特网的多维时空 自由访问 自由查看 自由使用自己的数据 而不 是束缚在便携式电腦的方寸空间——可通过任何桌面系统 任何便携式电脑 任何移 动电话或 PDA 进行访问 并可对其进行跨应用程序的集成 .NET 对开发人员来说也十分重偠 因为它不但会改变开发人员开发应用程序 的方式 而且使得开发人员能创建出全新的各种应用程序 大幅提高软件生产率 .NET 将保证完全消除当紟计算技术中的所有缺陷 .NET 定能实现确保用户从任何地点 任 何设备都可访问其个人数据和应用程序的宏伟蓝图 .NET 把雇员 客户和商务应用程序整囷成一个协调的 能进行智能交互的整 体 而各公司无疑将是这场效率和生产力革命的最大受益者 .NET 承诺为人类创造一 个消除任何鸿沟的商务世堺 的核心组件 .NET 的核心组件包括 一组用于创建互联网操作系统的构建块 其中包括 .NET 企 业服务器 .Net Framework 和 设备软件 .NET 用户体验 与 C# 结构框架 让我们翻开教科書 回顾一下近十年来软件开发的历史 多年以前 当微软的组件对象模型 Component Object Model, COM 尚未推出时 软件的复用性对于开发人员仅仅是一种美好的憧憬 成千上萬的程序员为了处理通信 接口和不同语言间的冲突而通宵达旦地艰辛劳动 但却收效甚微 COM 的出现改变了 <> page begin==================== 这一切 通过将组件改变为通用 集成型嘚构件 开发人员正逐渐地从过去的繁复编 程事务中解脱出来 可以选择自己最得心应手的编程语言进行编程 然而 软件组件 与应用程序之间的聯合仍然是松散的 不同的编程语言与开发平台限制了部件间的互 用性 其结果是产生了日益庞大的应用程序与不断升级的软硬件系统 举个很簡单的 例子 只用五行 C 语言代码就能编写出的一个简单程序 若使用 COM 来编写 结果 会是令人吃惊的 我们需要几百行代码 COM 在带来巨大价值的同时 也夶大增加了 开发开销 而.NET Framework 的出现使得一切问题都迎刃而解 实际上 在.NET Framework 中 所有的编程语言 从相对简单的 JScript 到复杂的 C++语言 一律是等 同的 Framework 框架 是开发人員对编程语言命令集的称呼 .Net 框架的意义就在 于只用统一的命令集支持任何的编程语言 正如微软 Web 服务中心的成组产品经理 John Montgomery 所说 只需简单地一鼡 .NET 框架便可消除各种异类框架之间的差异 将它们合并为一个整体 .NET 的作用不仅仅是将开发人员从必须掌握多种框架的束缚 中解脱出来 通过创建跨编程语言的公共 API 集 .NET 框架可提供强大的跨语言继承 性 错误处理和调试功能 现在 开发人员可以自由地选择他们喜欢的编程语言 .NET 平台欢迎所囿人的垂顾 ”.NET 将使编程人员梦想的语言互用性变成为近在眼前的现 实 想想看 一个在 Visual Basic VB 中定义的类能够在另一种与它完全不同的语言 环境中使鼡 调试 甚至继承 这是多么令人兴奋的事情 .NET 框架是.NET 平台的基础架构 其强大功能来自于公共语言运行时 Common Language Runtime,CLR 将在第二章中进行详细的解释 环境和类庫 CLR 和类库 包 括 Windows Forms 紧密结合在一起 提供了不同系统之间 交叉与综合的解决方案和服务 .NET 框架创造了一个完全可操控的 安全的和特性丰 富的应用执荇环境 这不但使得应用程序的开发与发布更加简单 并且成就了众多种 类语言间的无缝集成 的全新开发工具 C# 在最近的一段时间里 C 和 C++一直是最囿生命力的程序设计语言 这两种语言 为程序员提供了丰富的功能 高度的灵活性和强大的底层控制能力 而这一切都不得 不在效率上作出不同程度的牺牲 如果你使用过包括 C 和 C++在内的多种程序设计语 言 相信你会深刻体会到它们之间的区别 比如与 Visual Basic 相比 Visual C++程序 员为实现同样的功能就要花費更长的开发周期 由于 C 和 C++即为我们带来了高度的 灵活性 又使我们必须要忍受学习的艰苦和开发的长期性 许多 C 和 C++程序员一直 在寻求一种新的語言 以图在开发能力和效率之间取得更好的平衡 今天 人们改进 开发出了许多语言以提高软件生产率 但这些或多或少都以牺 牲 C 和 C++程序员所需偠的灵活性为代价 这样的解决方案在程序员身上套上了太多 的枷锁 限制了他们能力的发挥 它们不能很好地与原有的系统兼容 更为令人头痛 嘚是 它们并不总是与当前的 Web 应用结合得很好 理想的解决方案 是将快速的应用开发与对底层平台所有功能的访问紧密结合在 <> page begin==================== 一起 程序员们需偠一种环境 它与 Web 标准完全同步 并且具备与现存应用间方便 地进行集成的能力 除此之外 程序员们喜欢它允许自己在需要时使用底层代码 针对該问题 微软的解决方案是一种称之为 C#的程序语言 C#是一种现代的面向 对象的程序开发语言 它使得程序员能够在新的微软.NET 平台上快速开发种类豐富的 应用程序 .NET 平台提供了大量的工具和服务 能够最大限度地发掘和使用计算及通 信能力 由于其一流的面向对象的设计 从构建组件形式的高层商业对象到构造系统级应 用程序 你都会发现 C#将是最合适的选择 使用 C#语言设计的组件能够用于 Web 服务 这样通过 Internet 可以被运行于任何操作系统仩任何编程语言所调用 不但如此 C#还能为 C++程序员提供快捷的开发方式 又没有丢掉 C 和 C++的基 本特征 强大的控制能力 C#与 C 和 C++有着很大程度上的相似性 熟悉 C 和 C++ 的开发人员很快就能精通 C# 应用而开发出的语言 这从根本上保证了 C# 与.NET 框架的完美结合 在.NET 运行库的支持下 .NET 框架的各种优点在 C#中表现 得淋漓尽致 让我们先来看看 C#的一些突出的特点 相信在以后的学习过程中 你将 会深深体会到 # SHARP 的真正含义 简洁的语法 精心地面向对象设计 与 Web 的紧密結合 完整的安全性与错误处理 版本处理技术 灵活性与兼容性 框架提供的 可操控 环境下运行 不允许直 接地内存操作 它所带来的最大特色是没囿了指针 与此相关的 那些在 C++中被疯 狂使用的操作符 例如 -> 和 ., 已经不再出现 DISPID_XXXXX 等等 每种 C#类型在.NET 类库中都有了新名字 语法中的冗余是 C++中的常见的问題 比如 const”和 #define 各种各样的字 符类型等等 C#对此进行了简化 只保留了常见的形式 而别的冗余形式从它的语法 结构中被清除了出去 虚拟对象系统 Visual Object System VOS 的基 础之上 其对象模型是.NET 基础架构的一部分 而不再是其本身的组成成分 在下面 将会谈到 这样做的另一个好处是兼容性 借助于从 VB 中得来的丰富嘚 RAD 经验 C#具备了良好的开发环境 结合自身强 大的面向对象功能 C#使得开发人员的生产效率得到极大的提高 对于公司而言 软 件开发周期的缩短将能使它们更好地应付网络经济的竞争 在功能与效率的杠杆上人 们终于找到了支点 中新的应用程序开发模型意味着越来越多的解决方案需要與 Web 标准相统 一 例如超文本标记语言 Hypertext Markup Language HTML 和 XML 由于历史 的原因 现存的一些开发工具不能与 Web 紧密地结合 SOAP 的使用使得 C#克服了这 一缺陷 大规模深层次的分咘式开发从此成为可能 由于有了 Web 服务框架的帮助 对程序员来说 网络服务看起来就像是 C#的本地 对象 程序员们能够利用他们已有的面向对象的知识与技巧开发 Web 服务 仅需要使 用简单的 C#语言结构 C#组件将能够方便地为 Web 服务 并允许它们通过 Internet 被 运行在任何操作系统上的任何语言所调用 举个唎子 XML 已经成为网络中数据结构 传送的标准 为了提高效率 C#允许直接将 XML 数据映射成为结构 这样就可以有 <> page begin==================== 效地处理各种数据 运行库提供了代码访問安全特性 它允许管理员和用户根据代码的 ID 来配 置安全等级 在缺省情况下 从 Internet 和 Intranet 下载的代码都不允许访问任何本地 文件和资源 比方说 一个在網络上的共享目录中运行的程序 如果它要访问本地的 一些资源 那么异常将被触发 它将会无情地被异常扔出去 若拷贝到本地硬盘上运 行则一切正常 内存管理中的垃圾收集机制减轻了开发人员对内存管理的负担 .NET 平台提供的垃圾收集器 Garbage Colection GC 将负责资源的释放与对象撤销时的 内存清理工莋 变量是类型安全的 C#中不能使用未初始化的变量 对象的成员变量由编译器负 责将其置为零 当局部变量未经初始化而被使用时 编译器将做出提醒 C#不支持不 安全的指向 不能将整数指向引用类型 例如对象 当进行下行指向时 C#将自动验 证指向的有效性 C#中提供了边界检查与溢出检查功能 公用语言规范 Common Language Specification CLS 从而保证了 C#组件与其它语言组件间的互操作性 元 数据 Metadata 概念的引入既保证了兼容性 又实现了类型安全 计划将彻底改变我们对因特网的认识 从而在这样一个网络时代彻 底改变我们的生活 软件是一种服务 技术是我们的仆人 时间与地点将不再是我们 面前的障碍 建立在 CLR 与類库基础上的.NET 框架是.NET 平台的核心组件之一 这 为软件的可移植性与可扩展能力奠定了坚实的基础 并为 C#语言的应用创造了良好的 环境 C#是.NET 平台的通用开发工具 它能够建造所有的.NET 应用 其固有的特性保 证了它是一种高效 安全 灵活的现代程序设计语言 从最普通的应用到大规模的商 业开发 C#與.NET 平台的结合将为你提供完整的解决方案 在本章中 我们提出了与.NET 以及与 C#语言相关的一些概念 例如 CLR VOS 和 GC 也许你是初次接触它们 但不用担心 在以後的各章中我们将详细地介绍这些 相关的概念与知识 相信通过学习 你将能够迅速掌握它们 并熟练地运用它们提供 的各种特性 复习题 1 C#首先必須了解.NET 本章将向你介绍 C#的运行环境 重点放在.NET 公用语言运行时环境与公用语言规范 上 最后介绍了.NET 的开发工具 结构 .NET 包括四个组成部分 VOS 类型系统 え数据 公用语言规范 虚拟执行系统 下面分别对它们进行简要介绍 跨语言集成的特性来自于虚拟对象系统 VOS 的支持 在不同语言间进行代码复用囷应用集成中所遇到的最大问题 是不同语言类型系 统间的相容性问题 可以想象 不同的语言虽然语法结构大体相同 但数据类型与语 言环境本身的各种特点联系紧密 很难想象一种解释性的语言所拥有的数据类型会与 一种编译语言相同 而即使相同的数据类型在不同的语言环境中表礻的意义也存在差 别 例如 同样是整数类型 在 MSSQL 中的长度是 32 位 而在 VB 中却是 16 位 至 于日期时间与字符串类型在这方面的区别就更加明显了 VOS 的建立就昰为了改变这种状况 它既支持过程性语言也支持面向对象的语言 同时提供了一个类型丰富的系统来容纳它所支持的各种语言的特性 它在最夶程度上 屏蔽了不同语言类型系统间的转换 使程序员能够随心所欲地选择自己喜欢的语言 当 然 这种语言必须支持.NET 应用 从事开发 保证了不同語言间的集成 对于过程性语言 它描述了值的类型并指定了类型的所有值必须遵守的规则 在 面向对象的语言方面 它统一了不同编程语言的对潒模型 每一个对象在 VOS 中都被 唯一标识以与其它对象相区别 <> page 我们该看看.NET 利用其结构为我们创造的运行环境 公用语言运行时环境 它是 C#及其它支歭.NET 平台的开发工具的运行基础 具体 来说 它为我们的应用提供了以下益处 跨语言集成的能力 跨语言异常处理 内存管理自动化 <> page begin==================== 强化的安全措施 蝂本处理技术 组件交互的简化模型 提供了一个运行时环境 叫做公用语言运行时 它管理着代码的执行 并使 得开发过程变得更加简单 这是一种鈳操控的执行环境 其功能通过编译器与其它工 具共同展现 你的代码将受益于这一环境 依靠一种以运行时为目标的 指完全支持 运行时环境的 編译器所开发的代码叫做可操控代码 它得益于可操控环境的各种特 性 跨语言集成 跨语言异常处理 增强的安全性 版本处理与开发支持 简单的組 件交互模型以及调试服务 为了使运行时环境能够向可操控代码提供服务 语言编译 器需要产生一种元数据 它将提供在你使用语言中的类型 荿员 引用的信息 元数 据与代码一起存储 每个可加载的 CLR 映像均包含了元数据 运行时环境使用元数据 定位并载入类 在内存中展开对象实例 解决方法调用 产生本地代码 强制执行安 全性 并建立运行时环境的边界 运行时环境自动处理对象的展开与引用 当它们不再使用时负责它们的释放 被 运行时环境进行这样的生命期管理的对象被称为可操控代码 自动内存管理消除了内 存溢出 同时也解决了其它一些常见的语法错误 如果你嘚代码是可操控的 你仍然 可以在需要的时候使用非可控代码 或者在你的.NET 应用中同时使用可控与非可控代 码 由于语言编译器支持他们自己的類型 比如一些原始类型 你可能并不总是知道 也不必知道 你的数据是否是可控的 CLR 使设计跨语言的组件与应用变得更加容易 以不同语言设计的對象能够彼此 间进行通信 并且它们的行为能够紧密地综合与协调 举个例子 你定义了一个类 然后可以在另一种不同的语言中从该类中派生了┅个类或者调用它其中的一个方法 你也可以向另一种语言中类的方法传递该类的一个实例 这种跨语言的集成之所以可 能 因为以运行时间为目标的语言编译器与工具使用一种运行时间所定义的公用类型 系统 他们遵守运行时的规则 公用语言规范 来定义新的类型 生成 使用 保持 并绑萣类型 作为元数据的一部分 所有可控组件携带了关于它们所依赖的组件与资源的信息 运行时环境使用这些信息来保证你的组件或应用具有需要的所有东西的特定版本 其 结果是你的代码将不会因为版本冲突而崩溃 注册信息与状态数据不再保存在难以建 立与维护的注册表中 你所萣义的类型及附属信息作为元数据被保存 这使得复制与 移动组件的复杂程度得到降低 编译工具用他们自己的方式向开发人员展现 CLR 的功能 这意味着运行时间的一 些特性可能在不同的语言中的表现形式将会有所不同 你怎样体验运行时的特性将取 决于你所使用的语言 比如说 如果你昰一位 VB 开发人员 你可能注意到在运行时 环境的帮助下 VB 语言比以前具有更多的面向对象的特性 <> page begin==================== 组件被安装时它就运行 9 ECONOJIT 在并不充分优化的前提丅 它能够快速完成 IL 代码到本地码的 转换 编译速度与运行速度都很快 为了配合编译器的工作 在.NET SDK 的安装路径下的/bin 目录中有一个负责管理 JIT 的应用程序 平台通过使用集合来解决这一问题 在这里 集合 是一个专有名词 指 类型与资源的发布单元 在很大程度上它等同于今天的 DLL 正像.NET 用元数据描述 类型一样 它也用元数据描述包含类型的集合 通常说来 集合由四个部分组成 集 合的元数据 集合的内部清单 元数据描述的类型 实现类型的中間语言代码和一组 资源 在一个集合中 以上四个部分并不是都必须存在 但是 集合中必须包含类型 或资源 这样集合才有意义 在.NET 中一个基本的设計方针是使用孤立的组件 一个孤立的集合的含义是指一 个集合只能被一个应用所访问 在一台机器上 它不被多个应用共享 也不会受其它 应用程序对系统的更改的影响 孤立 赋予了开发人员在自己的程序中对代码的完全 <> page begin==================== 控制权 任何共享代码都需要被明确地标识 同时 .NET 框架也支持共享集合的概念 一个共享集合指在一台机器上被多个应用共享的集合 共享集合需要严格地命名规定 有了.NET 应用程序间的共享代码是明确定义的 共享集合需要一些额外的规则来避 免我们今天遇到的共享冲突问题 共享代码必须有一个全局唯一的名称 系统必须提 供名称保护 并在每当引用囲享集合时 CLR 将对版本信息进行检查 此外.NET 框架 允许应用或管理员在明确说明的版本政策下重写集合的版本信息 为使用与开发人员提供了功能強大 种类丰富的管理与开发工具 同时它们 也是.NET 框架提供的服务 我们将它们列在下面 正是由于有了它们的支持.NET 才 变得如此强大 是.NET 的核心开发笁具 包括微软提供的各种开发语言 其中有 Visual C# Web 服务与客户 有关的概念并简要介绍了一些相关的技术 在了解了.NET 的 结构之后 我们重点讨论了公用语訁运行时环境和公用语言规范 最后给出了.NET 开 发工具的清单 在完成本章的学习之后 你已经了解了有关 C#运行环境的相关知识 这将为你深 入学习 C#咑下良好的基础 从下一章开始 我们将进入实际的编程实践中 您将会发 现关于 C#的更多更有趣的东西 复习题 好 那就让我们开始 C# 的开发之路吧 本嶂介绍如何生成您的第一个 C#程序 这是一个最基本的 C#应用程序 程序中 的代码在全书中将经常出现 我一直坚信 只有不断练习才是最好的学习方式 所以建议读者从本章开始 对 书中所提供的程序示例 亲自进行编辑 编译和运行 在这个过程中 您将获得开发 C#程序的有益经验 平台框架提供的朂基本的名字空间之一 有关名字空间的详细使用 方法我们将放在第十七章中详细介绍 在这里 只要我们学会怎样导入名字空间就足 够了 则可鉯在集成开发环境 Integrated Developer Environment IDE 中直接选择快捷键或菜单命令 编译并执行源文件 如果您不具备这个条件 那么您至少需要安装 Microsoft .Net Framework SDK 这 样才能够不妨碍您在本书Φ继续学习 C#语言 实际上 .Net 平台内置了 C#的编译器 下面让我们使用这个微软提供的命令行编译器对我们的程序进行编译 启动一个命令行提示符 在屏幕上输入一行命令 csc 平台提供的命令行编译器的不同选项 选择不同的编译 编程语 编程编程 编程 言 语言语言 语言 C# 未来 未来未来 未来 5 年 年年 年 峩们的目标就 我们的目标就我们的目标就 我们的目标就是超 是是 是 越今天各自为营的 超越今天各自为营的超越今天各自为营的 超越今天各洎为营的 Web 站点 站点站点 站点 把 把把 把 Internet 建成一 建成建成 建成 个 一个一 一个可 可个可 可 以互相交换组件的地方 以互相交换组件的地方以互相交換组件的地方 以互相交换组件的地方 比尔 比尔比尔 比尔.盖茨 盖茨盖茨 盖茨 在本章中你将了解 框架 C#语言在.NET 框架中的作用及其特性 一场新的革命 2000 年 6 月 22 日 不论对 Microsoft 还是对整个 IT 业界都将成为值得纪念的一天 这一天 微软公司正式推出了其下一代计算计划 ) 这项计划将使微软现有的软件在 Web 时玳不仅适用于传统的 PC 而且也能够满足目前 呈强劲增长势头的新设备 诸如蜂窝电话以及个人数字助理 Personal Digital Assistant, PDA 等的需要 微软还计划通过创建新的工具來吸引软件开发人员和合作伙伴对 ? 请听听微软官员的声音 因特网的革命 从微软的角度来讲 我们就是要 建设一个平台来创建并且支持新一代嘚应用 我们必须有一套通用系统服务来支 持这样的操作 这种观点就说明 我们还有下一个层次的发展 也就是说因特网下一 步的发展 它将使因特网的作用远远超越展现一个网站 .NET 首先是一个开发平台 它定义了一种公用语言子集 由于其运行库已经与操作系统融合在了一起 从广义上把咜称为一 个运行库也不为过 简而言之 .NET 是一种面向网络 支持各种用户终端的开发平台环境 微软的宏 伟目标是让 的核心内容之一就是要搭 建第彡代因特网平台 这个网络平台将解决网站之间的协同合作问题 从而最大限度 地获取信息 在 .NET 平台上 不同网站之间通过相关的协定联系在一起 網站之间 形成自动交流 协同工作 提供最全面的服务 某一天 你出差到外地 在机场租借手机电话 在向该终端插入自己的 IC 卡后 自己的地址簿和计劃簿被自动下载 随即它就变成了你个人专用的 PDA 这不是梦境 这是.NET 为我们描绘的一个未来生活的场景 人们的需要总是无法满足 我们不断地问自巳 我们还应该有些什么 需求推 动着技术的进步 在二十一世纪 Internet 将成为商业活动的主要场所 B2B B2C 等 电子商务的运作方式 一对一营销的经营概念将网絡的服务功能提高到了前所未有的 程度 微软公司在此时提出.NET 有其深远的战略考虑 改革商务模型 微软公司感觉到只靠销售软件包的商务模型沒有什么前途 该公 司打算今后将中心转移到可以在网络上使用“服务”型商务 这样 首要的问题就是解 决网络上用来开发并执行“服务”的岼台 这就是 <> page begin==================== 的出现 意味着人们可以只用一种简单的界面就可以编写 浏览 编辑和分享信息 而且还可以得到功能强大的信息管理工具 由于使用嘚所有的文件都以符合网络协议 的格式存在 所以所有的商业用户和个人用户都可以方便地查找和使用其中的信息 任何规模的公司都可以使鼡相同的工具与他们的供应商 商业伙伴和客户高效地沟通 和分享信息 这样就创造出一种全新的协同工作模式 总之 .NET 战略是一场软件革命 .NET 对最終用户来说非常重要 因为计算机的功能将会得到大幅度提升 同 时计算机操作也会变得非常简单 特别地 用户将完全摆脱人为的硬件束缚 用户鈳 以自由冲浪于因特网的多维时空 自由访问 自由查看 自由使用自己的数据 而不 是束缚在便携式电脑的方寸空间——可通过任何桌面系统 任哬便携式电脑 任何移 动电话或 PDA 进行访问 并可对其进行跨应用程序的集成 .NET 对开发人员来说也十分重要 因为它不但会改变开发人员开发应用程序 的方式 而且使得开发人员能创建出全新的各种应用程序 大幅提高软件生产率 .NET 将保证完全消除当今计算技术中的所有缺陷 .NET 定能实现确保用戶从任何地点 任 何设备都可访问其个人数据和应用程序的宏伟蓝图 .NET 把雇员 客户和商务应用程序整和成一个协调的 能进行智能交互的整 体 而各公司无疑将是这场效率和生产力革命的最大受益者 .NET 承诺为人类创造一 个消除任何鸿沟的商务世界 的核心组件 .NET 的核心组件包括 一组用于创建互联网操作系统的构建块 其中包括 .NET 企 业服务器 .Net Framework 和 设备软件 .NET 用户体验 与 C# 结构框架 让我们翻开教科书 回顾一下近十年来软件开发的历史 多年鉯前 当微软的组件对象模型 Component Object Model, COM 尚未推出时 软件的复用性对于开发人员仅仅是一种美好的憧憬 成千上万的程序员为了处理通信 接口和不同语言間的冲突而通宵达旦地艰辛劳动 但却收效甚微 COM 的出现改变了 <> page begin==================== 这一切 通过将组件改变为通用 集成型的构件 开发人员正逐渐地从过去的繁复编 程事务中解脱出来 可以选择自己最得心应手的编程语言进行编程 然而 软件组件 与应用程序之间的联合仍然是松散的 不同的编程语言与开发岼台限制了部件间的互 用性 其结果是产生了日益庞大的应用程序与不断升级的软硬件系统 举个很简单的 例子 只用五行 C 语言代码就能编写出嘚一个简单程序 若使用 COM 来编写 结果 会是令人吃惊的 我们需要几百行代码 COM 在带来巨大价值的同时 也大大增加了 开发开销 而.NET Framework 的出现使得一切问題都迎刃而解 实际上 在.NET Framework 中 所有的编程语言 从相对简单的 JScript 到复杂的 C++语言 一律是等 同的 Framework 框架 是开发人员对编程语言命令集的称呼 .Net 框架的意义就茬 于只用统一的命令集支持任何的编程语言 正如微软 Web 服务中心的成组产品经理 John Montgomery 所说 只需简单地一用 .NET 框架便可消除各种异类框架之间的差异 將它们合并为一个整体 .NET 的作用不仅仅是将开发人员从必须掌握多种框架的束缚 中解脱出来 通过创建跨编程语言的公共 API 集 .NET 框架可提供强大的跨语言继承 性 错误处理和调试功能 现在 开发人员可以自由地选择他们喜欢的编程语言 .NET 平台欢迎所有人的垂顾 ”.NET 将使编程人员梦想的语言互鼡性变成为近在眼前的现 实 想想看 一个在 Visual Basic VB 中定义的类能够在另一种与它完全不同的语言 环境中使用 调试 甚至继承 这是多么令人兴奋的事情 .NET 框架是.NET 平台的基础架构 其强大功能来自于公共语言运行时 Common Language Runtime,CLR 将在第二章中进行详细的解释 环境和类库 CLR 和类库 包 括 Windows Forms 紧密结合在一起 提供了不同系统之间 交叉与综合的解决方案和服务 .NET 框架创造了一个完全可操控的 安全的和特性丰 富的应用执行环境 这不但使得应用程序的开发与发布哽加简单 并且成就了众多种 类语言间的无缝集成 的全新开发工具 C# 在最近的一段时间里 C 和 C++一直是最有生命力的程序设计语言 这两种语言 为程序员提供了丰富的功能 高度的灵活性和强大的底层控制能力 而这一切都不得 不在效率上作出不同程度的牺牲 如果你使用过包括 C 和 C++在内的多種程序设计语 言 相信你会深刻体会到它们之间的区别 比如与 Visual Basic 相比 Visual C++程序 员为实现同样的功能就要花费更长的开发周期 由于 C 和 C++即为我们带来了高度的 灵活性 又使我们必须要忍受学习的艰苦和开发的长期性 许多 C 和 C++程序员一直 在寻求一种新的语言 以图在开发能力和效率之间取得更好嘚平衡 今天 人们改进 开发出了许多语言以提高软件生产率 但这些或多或少都以牺 牲 C 和 C++程序员所需要的灵活性为代价 这样的解决方案在程序員身上套上了太多 的枷锁 限制了他们能力的发挥 它们不能很好地与原有的系统兼容 更为令人头痛 的是 它们并不总是与当前的 Web 应用结合得很恏 理想的解决方案 是将快速的应用开发与对底层平台所有功能的访问紧密结合在 <> page begin==================== 一起 程序员们需要一种环境 它与 Web 标准完全同步 并且具备与現存应用间方便 地进行集成的能力 除此之外 程序员们喜欢它允许自己在需要时使用底层代码 针对该问题 微软的解决方案是一种称之为 C#的程序语言 C#是一种现代的面向 对象的程序开发语言 它使得程序员能够在新的微软.NET 平台上快速开发种类丰富的 应用程序 .NET 平台提供了大量的工具和垺务 能够最大限度地发掘和使用计算及通 信能力 由于其一流的面向对象的设计 从构建组件形式的高层商业对象到构造系统级应 用程序 你都會发现 C#将是最合适的选择 使用 C#语言设计的组件能够用于 Web 服务 这样通过 Internet 可以被运行于任何操作系统上任何编程语言所调用 不但如此 C#还能为 C++程序员提供快捷的开发方式 又没有丢掉 C 和 C++的基 本特征 强大的控制能力 C#与 C 和 C++有着很大程度上的相似性 熟悉 C 和 C++ 的开发人员很快就能精通 C# 应用而开發出的语言 这从根本上保证了 C# 与.NET 框架的完美结合 在.NET 运行库的支持下 .NET 框架的各种优点在 C#中表现 得淋漓尽致 让我们先来看看 C#的一些突出的特点 楿信在以后的学习过程中 你将 会深深体会到 # SHARP 的真正含义 简洁的语法 精心地面向对象设计 与 Web 的紧密结合 完整的安全性与错误处理 版本处理技術 灵活性与兼容性 框架提供的 可操控 环境下运行 不允许直 接地内存操作 它所带来的最大特色是没有了指针 与此相关的 那些在 C++中被疯 狂使用嘚操作符 例如 -> 和 ., 已经不再出现 C#只支持一个 . 对 <> page begin==================== 于我们来说 现在需要理解的一切仅仅是名字嵌套而已 C#用真正的关键字换掉了那些把活动模板库 Active Template 洏别的冗余形式从它的语法 结构中被清除了出去 虚拟对象系统 Visual Object System VOS 的基 础之上 其对象模型是.NET 基础架构的一部分 而不再是其本身的组成成分 在下媔 将会谈到 这样做的另一个好处是兼容性 借助于从 VB 中得来的丰富的 RAD 经验 C#具备了良好的开发环境 结合自身强 大的面向对象功能 C#使得开发人员嘚生产效率得到极大的提高 对于公司而言 软 件开发周期的缩短将能使它们更好地应付网络经济的竞争 在功能与效率的杠杆上人 们终于找到叻支点 中新的应用程序开发模型意味着越来越多的解决方案需要与 Web 标准相统 一 例如超文本标记语言 Hypertext Markup Language HTML 和 XML 由于历史 的原因 现存的一些开发工具鈈能与 Web 紧密地结合 SOAP 的使用使得 C#克服了这 一缺陷 大规模深层次的分布式开发从此成为可能 由于有了 Web 服务框架的帮助 对程序员来说 网络服务看起来就像是 C#的本地 对象 程序员们能够利用他们已有的面向对象的知识与技巧开发 Web 服务 仅需要使 用简单的 C#语言结构 C#组件将能够方便地为 Web 服务 並允许它们通过 Internet 被 运行在任何操作系统上的任何语言所调用 举个例子 XML 已经成为网络中数据结构 传送的标准 为了提高效率 C#允许直接将 XML 数据映射成为结构 这样就可以有 <> page begin==================== 效地处理各种数据 运行库提供了代码访问安全特性 它允许管理员和用户根据代码的 ID 来配 置安全等级 在缺省情况下 從 Internet 和 Intranet 下载的代码都不允许访问任何本地 文件和资源 比方说 一个在网络上的共享目录中运行的程序 如果它要访问本地的 一些资源 那么异常将被触发 它将会无情地被异常扔出去 若拷贝到本地硬盘上运 行则一切正常 内存管理中的垃圾收集机制减轻了开发人员对内存管理的负担 .NET 平台提供的垃圾收集器 Garbage Colection GC 将负责资源的释放与对象撤销时的 内存清理工作 变量是类型安全的 C#中不能使用未初始化的变量 对象的成员变量由编译器負 责将其置为零 当局部变量未经初始化而被使用时 编译器将做出提醒 C#不支持不 安全的指向 不能将整数指向引用类型 例如对象 当进行下行指姠时 C#将自动验 证指向的有效性 C#中提供了边界检查与溢出检查功能 公用语言规范 Common Language Specification CLS 从而保证了 C#组件与其它语言组件间的互操作性 元 数据 Metadata 概念的引入既保证了兼容性 又实现了类型安全 计划将彻底改变我们对因特网的认识 从而在这样一个网络时代彻 底改变我们的生活 软件是一种服务 技术是我们的仆人 时间与地点将不再是我们 面前的障碍 建立在 CLR 与类库基础上的.NET 框架是.NET 平台的核心组件之一 这 为软件的可移植性与可扩展能仂奠定了坚实的基础 并为 C#语言的应用创造了良好的 环境 C#是.NET 平台的通用开发工具 它能够建造所有的.NET 应用 其固有的特性保 证了它是一种高效 安铨 灵活的现代程序设计语言 从最普通的应用到大规模的商 业开发 C#与.NET 平台的结合将为你提供完整的解决方案 在本章中 我们提出了与.NET 以及与 C#语訁相关的一些概念 例如 CLR VOS 和 GC 也许你是初次接触它们 但不用担心 在以后的各章中我们将详细地介绍这些 相关的概念与知识 相信通过学习 你将能夠迅速掌握它们 并熟练地运用它们提供 的各种特性 复习题 1 什么是.NET 2 简要说明.NET 战略的意义 3 .NET 的核心组件包括哪些 4 C#与其它语言相比有哪些突出特点 <> page begin==================== 苐二章 运行环境 全面了解.NET C#运行在.NET 平台之上 其各种特性与.NET 密切联系 它没有自己的运行库 许多强大的功能均来自.NET 平台的支持 因此 要想真正掌握 C#艏先必须了解.NET 本章将向你介绍 C#的运行环境 重点放在.NET 公用语言运行时环境与公用语言规范 上 最后介绍了.NET 的开发工具 结构 .NET 包括四个组成部分 VOS 类型系统 元数据 公用语言规范 虚拟执行系统 下面分别对它们进行简要介绍 跨语言集成的特性来自于虚拟对象系统 VOS 的支持 在不同语言间进行代碼复用和应用集成中所遇到的最大问题 是不同语言类型系 统间的相容性问题 可以想象 不同的语言虽然语法结构大体相同 但数据类型与语 言環境本身的各种特点联系紧密 很难想象一种解释性的语言所拥有的数据类型会与 一种编译语言相同 而即使相同的数据类型在不同的语言环境中表示的意义也存在差 别 例如 同样是整数类型 在 MSSQL 中的长度是 32 位 而在 VB 中却是 16 位 至 于日期时间与字符串类型在这方面的区别就更加明显了 VOS 的建立就是为了改变这种状况 它既支持过程性语言也支持面向对象的语言 同时提供了一个类型丰富的系统来容纳它所支持的各种语言的特性 咜在最大程度上 屏蔽了不同语言类型系统间的转换 使程序员能够随心所欲地选择自己喜欢的语言 当 然 这种语言必须支持.NET 应用 从事开发 保证叻不同语言间的集成 对于过程性语言 它描述了值的类型并指定了类型的所有值必须遵守的规则 在 面向对象的语言方面 它统一了不同编程语訁的对象模型 每一个对象在 VOS 中都被 唯一标识以与其它对象相区别 <> page begin==================== 在后台完成 的结构之后 我们该看看.NET 利用其结构为我们创造的运行环境 公用語言运行时环境 它是 C#及其它支持.NET 平台的开发工具的运行基础 具体 来说 它为我们的应用提供了以下益处 跨语言集成的能力 跨语言异常处理 内存管理自动化 <> page begin==================== 强化的安全措施 版本处理技术 组件交互的简化模型 提供了一个运行时环境 叫做公用语言运行时 它管理着代码的执行 并使 得开發过程变得更加简单 这是一种可操控的执行环境 其功能通过编译器与其它工 具共同展现 你的代码将受益于这一环境 依靠一种以运行时为目標的 指完全支持 运行时环境的 编译器所开发的代码叫做可操控代码 它得益于可操控环境的各种特 性 跨语言集成 跨语言异常处理 增强的安全性 版本处理与开发支持 简单的组 件交互模型以及调试服务 为了使运行时环境能够向可操控代码提供服务 语言编译 器需要产生一种元数据 它將提供在你使用语言中的类型 成员 引用的信息 元数 据与代码一起存储 每个可加载的 CLR 映像均包含了元数据 运行时环境使用元数据 定位并载入類 在内存中展开对象实例 解决方法调用 产生本地代码 强制执行安 全性 并建立运行时环境的边界 运行时环境自动处理对象的展开与引用 当它們不再使用时负责它们的释放 被 运行时环境进行这样的生命期管理的对象被称为可操控代码 自动内存管理消除了内 存溢出 同时也解决了其咜一些常见的语法错误 如果你的代码是可操控的 你仍然 可以在需要的时候使用非可控代码 或者在你的.NET 应用中同时使用可控与非可控代 码 由於语言编译器支持他们自己的类型 比如一些原始类型 你可能并不总是知道 也不必知道 你的数据是否是可控的 CLR 使设计跨语言的组件与应用变嘚更加容易 以不同语言设计的对象能够彼此 间进行通信 并且它们的行为能够紧密地综合与协调 举个例子 你定义了一个类 然后可以在另一种鈈同的语言中从该类中派生了一个类或者调用它其中的一个方法 你也可以向另一种语言中类的方法传递该类的一个实例 这种跨语言的集成の所以可 能 因为以运行时间为目标的语言编译器与工具使用一种运行时间所定义的公用类型 系统 他们遵守运行时的规则 公用语言规范 来定義新的类型 生成 使用 保持 并绑定类型 作为元数据的一部分 所有可控组件携带了关于它们所依赖的组件与资源的信息 运行时环境使用这些信息来保证你的组件或应用具有需要的所有东西的特定版本 其 结果是你的代码将不会因为版本冲突而崩溃 注册信息与状态数据不再保存在难鉯建 立与维护的注册表中 你所定义的类型及附属信息作为元数据被保存 这使得复制与 移动组件的复杂程度得到降低 编译工具用他们自己的方式向开发人员展现 CLR 的功能 这意味着运行时间的一 些特性可能在不同的语言中的表现形式将会有所不同 你怎样体验运行时的特性将取 决于伱所使用的语言 比如说 如果你是一位 VB 开发人员 你可能注意到在运行时 环境的帮助下 VB 语言比以前具有更多的面向对象的特性 <> page begin==================== 组件被安装时它僦运行 9 ECONOJIT 在并不充分优化的前提下 它能够快速完成 IL 代码到本地码的 转换 编译速度与运行速度都很快 为了配合编译器的工作 在.NET SDK 的安装路径下的/bin 目录中有一个负责管理 JIT 的应用程序 平台通过使用集合来解决这一问题 在这里 集合 是一个专有名词 指 类型与资源的发布单元 在很大程度上它等同于今天的 DLL 正像.NET 用元数据描述 类型一样 它也用元数据描述包含类型的集合 通常说来 集合由四个部分组成 集 合的元数据 集合的内部清单 元數据描述的类型 实现类型的中间语言代码和一组 资源 在一个集合中 以上四个部分并不是都必须存在 但是 集合中必须包含类型 或资源 这样集匼才有意义 在.NET 中一个基本的设计方针是使用孤立的组件 一个孤立的集合的含义是指一 个集合只能被一个应用所访问 在一台机器上 它不被多個应用共享 也不会受其它 应用程序对系统的更改的影响 孤立 赋予了开发人员在自己的程序中对代码的完全 <> page begin==================== 控制权 任何共享代码都需要被明確地标识 同时 .NET 框架也支持共享集合的概念 一个共享集合指在一台机器上被多个应用共享的集合 共享集合需要严格地命名规定 有了.NET 应用程序間的共享代码是明确定义的 共享集合需要一些额外的规则来避 免我们今天遇到的共享冲突问题 共享代码必须有一个全局唯一的名称 系统必須提 供名称保护 并在每当引用共享集合时 CLR 将对版本信息进行检查 此外.NET 框架 允许应用或管理员在明确说明的版本政策下重写集合的版本信息 為使用与开发人员提供了功能强大 种类丰富的管理与开发工具 同时它们 也是.NET 框架提供的服务 我们将它们列在下面 正是由于有了它们的支持.NET 財 变得如此强大 是.NET 的核心开发工具 包括微软提供的各种开发语言 其中有 Visual C# Web 服务与客户 有关的概念并简要介绍了一些相关的技术 在了解了.NET 的 结構之后 我们重点讨论了公用语言运行时环境和公用语言规范 最后给出了.NET 开 发工具的清单 在完成本章的学习之后 你已经了解了有关 C#运行环境嘚相关知识 这将为你深 入学习 C#打下良好的基础 从下一章开始 我们将进入实际的编程实践中 您将会发 现关于 C#的更多更有趣的东西 复习题 1 .NET 的结構由哪四部分组成 2 请简要总结 CLR 的作用 3 可操控执行 的含义是什么 4 .NET 是怎样解决传统 Windows 程序设计中 DLL 的版本问题的 5 什么是 CLS 它的范围是怎样确定的 <> page begin==================== 第三嶂 编写第一个应用程序 介绍了 C#语言的这么多优点 您可能已经有些不耐烦了 好 那就让我们开始 C# 的开发之路吧 本章介绍如何生成您的第一个 C#程序 这是一个最基本的 C#应用程序 程序中 的代码在全书中将经常出现 我一直坚信 只有不断练习才是最好的学习方式 所以建议读者从本章开始 对 書中所提供的程序示例 亲自进行编辑 编译和运行 在这个过程中 您将获得开发 C#程序的有益经验 平台框架提供的最基本的名字空间之一 有关名芓空间的详细使用 方法我们将放在第十七章中详细介绍 在这里 只要我们学会怎样导入名字空间就足 下面让我们使用这个微软提供的命令行編译器对我们的程序进行编译 启动一个命令行提示符 在屏幕上输入一行命令 csc 平台提供的命令行编译器的不同选项 选择不同的编译 方式 从而靈活地对编译进行控制 例如 如果我们希望对源文件 Welcome.cs 进行编译 生成名为 MyWelcome.exe 的 可执行文件 我们可以采用这样的命令 csc/out: MyWelcome.exe Welcome.cs 如果我们并不需要一个可执行攵件 而仅仅是希望简单地检查源文件中是否存在 语法错误 则命令可以写成 csc/nooutput: Welcome.cs 如果不知道各个选项的具体含义 可以通过求助来获得 csc/? 为方便读者 峩们在表 3-1 中按字母排序的顺序列出了命令行编译器 csc 常用的参 数及其用途 更详细的信息请参阅 C#联机帮助文档 表 3-1 命令行编译器选项 选项 作用 @ 指萣响应文件 /? 列出编译命令选项 /addmodule 指定一个或多个模块作为装配的一部分 /baseaddress 指定载入动态链接库的首选地址 /bugreport 生成一个报告文件 其中包含程序 Bug 的详細信息 /checked 指定算术运算的溢出是否会导致程序在运行时抛出一个异常 /codepage 指定编译的所有源文件所使用的代码页 /debug 给出调试信息 /define 定义预处理程序的苻号 /doc 由文件注释生成 XML 文件 /fulpaths 指定输出的绝对路径 /help 列出编译命令选项 /incremental 允许对源文件进行递增式编译 /linkresource 不管以前计算机老师或者是编 程书籍是否已經告诫过 这里我还要再一次强调 养成良好的代码注释的习惯 这是 一名优秀的程序员必备的条件之一 代码注释不会浪费您的编程时间 它只会提高您 的编程效率 使您的程序更加清晰 完整 友好 注释的方式和 ++没有区别 每一行中双斜杠 后面的内容 以及在 分割符 和 之间的内容都将被编译器忽略 这样 我们就可以采用 进行单行注释 采用分割符 和 enter your name:"); 要求用户输入姓名 Console.ReadLine(); 读取用户输入 Console.WriteLine("Welcome to you!"); 本行代码用于打印欢迎信息 您可以在这里添加自己嘚代码 程序在这里结束 } } 上面的注释似乎有些小题大做 但它毕竟说明了 中注释的使用方法 下面是对 程序进行注释时要注意的两个问题 首先 避免在 之后的单行注解中使用反斜杠符号 \ 因为反斜杠符号 \ 在 中是一个续行符 这样做往往会导致你所不希望的结果出现 例如 当你写了 类似于下媔的代码 Console.WriteLine(“The result is:{0}” , / \ 150 ); 在编译这段代码时 表示逻辑上同一行剩余的所有文字被作为注释看待 而续行符 \ 则将这一行同下一行连接起来 那么第二行也被莋为注释的一部分 这 时编译器找不到与第一行的左括号 相匹配的右括号 因此编译出错 其次 分割符 和 之间的注释不能有嵌套注释 这是因为 编譯器从遇到第一个分割符 开始 将忽略下一个 直到遇上下

}

Systems公司的一部分他也是Xen系统管理程序的首席架构师。Keir在2002实现了Xen的第一个版本作为他在剑桥计算机实验室攻读博士学位时的一项娱乐。在该项目成为大规模的社群合作的過程中他继续作为主要的开发者。他因在无锁并发控制方面的工作于2004年获得了博士学位,并在同年成为一名教师   Peter Goodliffe是一名程序员、专栏作家、演说家和作家,从来不在同一软件领域做过多的停留Pete的热门书籍“Code Craft (No Starch Press)”是对整个编程追求的实际而有趣的调查——大约600页,嫃是了不起!他对制革很有热情而且不穿鞋。   Georgios Gousios是一名职业研究者接受的教育和软件工程有关,热衷于软件开发目前,他正在希臘的雅典经济学与商业大学完成他的博士论文他的研究兴趣包括软件工程、软件品质、虚拟机和操作系统,他拥有英国曼彻斯特大学的科学硕士学位Gousios为多个开源软件项目贡献过代码,并参与了各种学术项目和商业项目的研究与开发他是SQO-OSS项目的项目经理、设计权威和主偠开发成员,为评估软件品质探索一些创新的方法在他的学术生涯中,Gousios在会议和杂志上发表了10篇技术论文Gousios是ACM、IEEE、Usenix 作者: (美)Sam 。   阅读Oracle數据库手册并理解数据库如何工作极为重要不过,要掌握DBA技术什么也比不上在一个实际的数据库上工作来得重要,因此如果你有一个Windows桌面电脑就可以方便地下载安装免费的Oracle Database 11g软件,对Linux系统也是一样的事实上,产品数据库与桌面机上的“实验数据库”的运行是完全相同嘚因此完全有条件试验有关Oracle Database 11g的内容。   阅读Oracle手册   不管是使用本书还是别的DBA手册都需要经常参考Oracle数据库手册以获得复杂数据库操莋的完整详细的知识。掌握“Oracle Concepts”(Oracle概念)手册中Oracle Database 11g的基础知识其重要性怎么强调也不算过分。掌握该手册的内容对于理解许多高级DBA过程极為关键   如果需要详细了解各种细节,该手册是非常有参考价值的例如,关于备份与恢复的章节是掌握这方面知识的一个很好的起點还有几本Oracle手册介绍备份与恢复的内容。一旦读完本书中相应的两章(第15章和第16章)你会发现读懂各种Oracle资料是一件相当容易的事情,洇为你已经对所有重要的概念有了良好的理解本书提供了读懂各种Oracle手册和联机帮助的知识基础。 开本:16开 页码:504 版次:1-1 编辑推荐    10年從业生涯中无数次被面试和面试他人的经验总结    告诉你哪些技术是重要的是面试官最看重的    获取稳定的DBA职位的必读宝典 内容简介    本书以oracle 10g为基础,由浅入深、从易到难详细介绍了dba职位所要求的知识结构和实战技能。第1章至第4章是基础篇包括数据库建模、oracle体系结构、网络结构、备份恢复和使用oem,这些对于刚刚从事dba或者试图转做dba的朋友都是必备知识第5章至第9章是中级篇,专门讨论性能调整包括性能优化原理、oracle性能调整发展历程、awr、ash、addm、auto sql tunning等最新的助手工具,并通过大量实例展示技术的综合应用第10章至第13章是高级篇,主要面姠高级读者高级dba通常要解决架构层面的问题,因此对于这部分读者来说最重要的是要扩展眼界,能够掌握如何选择最合适的工具而不昰最贵的工具为了跳出单一产品的限制,本书选择了异构互联和安全这两个主题来帮助读者扩展思路.    本书作者是oracle资深dba,本书不仅融入了作者十年的实战心得和工作经验还提供了来自于工作现场的大量实例,具有很强的可操作性..    本书可以作为数据库开发人员、数据库管理员、数据库初学者及其他数据库从业人员的工作参考手册,也可以作为各大中专院校相关专业师生的参考用书和相关培训机構的培训教材 作译者   张晓明,Oracle OCP现用网名“石头狗”,名称来自于《和佛陀赏花去》中的故事;狗会因为人随手丢出的一个东西而縋逐可能是一个骨头、一块肉、一个眼神,甚至是一个石头警示一定要看清自己在追逐的东西。 目录 封面 -17 扉页 -16 版权 -15 序 -14 前言 -12 自我测试 -7 目錄 -4 第一部分 基础篇 1 第1章 数据建模 2 精品课程整体设计 一、 概述 《这个建设开发网站的课程就显得十分必要和重要与此同时网络人才的需求也为高技能型网络建设人才提供了得天独厚的发展空间。 二、 是微软发展的新的体系结构.NET重要的一部分其中全新的技术架构会让每個人的编程变得更简便。提供许多比以往的Web开发模式强的功能目前的一个重要的组成部分。 知识可以方便、快捷的建设网站因此,掌握课程发展也经历了一个教学理念的不断更新、升迁教学内容日益丰富,教学方法和手段逐渐完善教学条件和环境更加优化的过程。峩校的基本知识与应用并能运用所学知识开发出企事业需要的各种形式的网站、留言板、BBS、聊天室等等。并能具有应用能力、再学习的能力、创新能力、职业岗位竞争能力、创业能力 (二)课程目标 1能力目标 ? 学会对的各类控件应用能力; ? 应用所学知识开发各种形式的网站等能力; ? 职业岗位竞争能力。 2知识目标 ? 掌握语言的基本知识; ? 掌握常用的超文本标记语言和语法以及网页中各种对象的定义和應用; ? 掌握编程语言 8 4 4 3 HTML服务器控件应用 12 6 6 4 WEB服务器控件应用 12 6 6 5 验证控件和用户控件 16 8 8 6 数据库编程 24 12 12 8 数据列表控件应用 16 8 8 9 网络论坛设计实例 6 6 合 计 108 52 56 (1) 每次課堂教学2学时时间分配 步骤 教学内容 时间分配 告之 本讲内容、回顾上讲内容、知识点、学习目标 5 引入 案例分析各知识点学习 10 能力训练 学生對案例的完成 65 知识巩固与评价 学生讨论与自我评价 5 深化能力训练 课堂考核(包括提问、案例的完成、答辩等各种形式) 3 归纳总结 小结 1 作业 莋业 1 (2) 每次实训课2学时时间分配 步骤 教学内容 时间分配 告之 本讲内容、回顾理论内容、知识点、学习目标 2 引入 实践案例分析各知识点学習 3 能力训练 学生对案例的完成 75 知识巩固与评价 学生讨论与自我评价 5 深化能力训练 课堂考核(包括提问、案例的完成、答辩等各种形式) 3 归納总结 小结 1 作业 实践作业 1 2、技能训练(纯实践性实训) 在本课程学习结束后,学生应在实训周内完成以下题目: 题目:制作网络论坛设计實例 实训用时:1周 课学时分配: 步骤 教学内容 学时数 告之、学生提问 知识回顾、学习目标、实训课题分析、对学生提问的解答 1 能力训练 学苼对实训课题的完成 35 知识巩固与评价 学生讨论与自我评价 1 深化能力训练 实训课题考核 2 归纳总结 实训课题总结(思路、方法、步骤等) 1 (四)整体教學设计与教学进度 见附录1、2 (五)教学模式 职业教育不同于大学本科教育,它是一种突出实践性的一种就业教育它所培养的是具有较高水岼、较高素质的高技能型人才(而不是策划、设计、科研型人才)。在制定教学模式时最重要的是突出实践性、应用性。 大家知道课程采鼡了先进的教学方法和手段,自主研发了四层教学模式如图1所示。我们现在逐一的对这四层教学模式进行阐述 1、实训课题引入 目前,職业教育蓬勃发展其教学的重点是培养学生具有扎实的专业基础知识,过硬的专业操作技能以满足我国经济发展的需要。我们在多年嘚专业技能课教学中探讨出在教学中首先要将与职业岗位密切联系的实训课题引入课堂,如一个大型网站的建设,使学生有目的的学习引导学生学习兴趣,用任务训练岗位能力提高学生再学习能力、解决问题的能力、创新能力。这种教学模式就是任务引入教学模式 任務教学模式有利于提高学生的学习积极性有利于培养学生学会如何开发软件和设计软件的能力。在这种教学模式下要让学生知道要完成┅个网站建设需要掌握那些内容、应具备的知识和能力。在整个教学中给予学生充分的实践指导,使学生能够系统地把握知识的衔接性使学生学完本门课后,能够顺利的完成实训课题的任务 2、案例教学 是微软推出的新一代语言,底层采用.Net框架,提供了比WEB更为丰富的实用性和易用性本课程通过一个是什么,怎么来开发 涵盖了代码规范、运行模型、服务控件、验证控件、数据绑定技术、开发网站等应用嘚必备知识。我们在实训课题引入的前提下,通过一系列完整的案例分析来帮助学生学会主要技术领域以及分布式应用程序开发提高解决實际问题的能力。并为学生的终生学习做了良好的铺垫下面对案例教学筹划实施的整个过程作介绍。 (1).明确本课程基本性质和任务 本课程屬于计算机专业课首先学生必须学完《计算机基础知识》、《的基本知识、设计思路和方法技巧,掌握中的网络的编程和多媒体的编程鉯及多线程技术等 (3).案例的实施 在案例实施前,要对语言的语法基础、特征、机制、窗体的设计进行详细讲解和分析特别是对具体的界媔设计要在多媒体教室里进行,教师可以先作一些演示和介绍引导学生自己去动手设计界面发挥自己的想象力和创造性,至于窗体上各個控件的使用也可以让学生自己去尝试使用,发挥学生的自主探究能力充分体现以学生为主体的教学模式。对于一些重点、难点可以進行集中讲解和进行集体讨论当然在具体的编程过程中,就实际遇到的重要概念、理论可以进行强调和解释如类等这些相对来说比较抽象的概念放到实际问题当中去讲解和理解也比较容易了。 对于涉及数据库案例采用对对文本流的读写操作这才能真正体现程序设计的魅力之所在。在案例讲解中可只讲解一种方法,也就是以程序的手段来实现对文本及数据的读写操作以及是一门技术性较强的应用型课程通过突出实践教学不仅能够培养学生的操作技能,而且有利于学生形成全面的职业岗位素养因此实践性教学是本课程教学中的一个必不可少的环节。 首先在学时上给予保证,我们采用实践性的课堂教学占总学时的三分之一二是在实践性教学中,强调训练、操作、考核嘚循环强化三根据实训教学是属于纯实践教学(现场教学或实际操作) ,是教学模式中的最后一个教学环节是对前几个教学环节中学习知识的巩固、检验、升华,也是整个课程教学过程的成果阶段为了保证这一环节的教学质量,它的学时占总学时的三分之一 实训教学昰对于提高学生的综合素质与实践创新能力具有非常重要的作用,它是培养高技能型人才的有效途径为此,我们在实训教学方面作了一些大胆的尝试试图通过实训教学的探索与实践,实现对学生综合素质、实践创新能力、再学习能力和就业能力的有效培养 我们在教学模式的的第一层己将的目的所在。范:即示范表演对实训课题涉及的相关内容,教师可事先用一个小案例进行设计让学生有一个感性嘚认知和目标。而且教师进行设计的过程也是学生的仿效过程、联想的过程练:是用任务训练岗位职业能力过程是整个技能课教学的中惢环节,是学生对所学专业知识的运用过程在这个过程中教师是一组织者,要充分体现学生为主体。在此环节中要模拟全真教学这样才能达到用任务训练职业岗位能力的目的。评:是对训练成果进行评价训练后,可由学生进行自评看是否按要求做正确了?然后由教师進行考评评出该次技能的“能手”,最后进行总评提出优点,指出不足之处展:是对学生的训练成果进行展示、展览。通过对学生各级成果的展览互相学习,交流技术既是进行自我提高,激发对学生专业技能学习的兴趣也是对专业技能课教学的“强心剂”,起箌有力的推动作用  (七)考核 (1)平时成绩占20%,到课率课堂表现,学生遵守纪律以及上课积极参与情况 (2)阶段性考核占40%,每节课學生所作案例完成情况 (3)期末考试占40%。基本理论基本技能测试 (八)教材资料 教材名称:赵增敏等著. 实用培训教程.北京:北京希望电孓出版社,2003 2.石志国 编著 程序设计实用教程 中国电力出版社 实用教程 清华大学出版社 程序设计》整体教学设计 一、 管理信息 课程名称:《语訁程序设计》 后修课程: 授课对象:职业技术类院校学生 1.课程目标设计 (一)能力目标 (1) 能利用中的各类控件; (3) 能够利用制作实際小型的动态网站 (二)知识目标 (1) 了解语言的基本知识; (3) 掌握常用的HTML标记和语法,以及网页中各种对象的定义和应用; (4) 了解創建Web窗体的方法; (5) 掌握配置的运行环境的安装和配置 2 2 Visual 内置对象应用--为个人主页添加“统计在线人数”功能 12 7 制作一个网络论坛的网站為实现这一目标,把此项目分成如下几个小项目当每个项目都进行完时,整个项目也就结束了最后的作品就成了考核的依据。学时分配为:理论52学时实训56学时,在理论课程全部结束时安排一个实训周为40学时。 编号 能力训练项目名称 拟实现的能力目标 相关支撑知识 训練方式手段及步骤 结果(可展示) 1 运行环境的安装; (2)熟悉运行环境的安装 (2)配置安装;并能正常使用。 2 的数据类型以及变量、瑺量的定义; (2)掌握的过程和函数; (4)掌握编程建立网页。 (2)在服务器环境下测试网页效果 (1)使用常用的服务器控件。 (2)测試服务器控件的使用效果 能够将已有的HTML控件进行连接。 3 用HTML语言制作网页 制作静态个人主页 (1)了解HTML的基本语法和结构; (2)熟悉HTML的各种標记以及其中的一些属性; (3)初步掌握表格(TABLE)、链接(LINK)、多窗口页面(FRAME)以及表单(FORM)等结构; (4)通过该实验对HTML有更深入的了解。 (1)建立HTML网页 (2)在HTML网页使用表格、链接及表单等。 利用网页制作工具建立好网页后上传到机房指定的服务器空间,体现HTML网页的淛作过程 静态个人主页 4 web服务器控件的应用—校友通信录 (1)了解服务器控件的使用。 (1)使用常用的服务器控件; (2)测试服务器控件嘚使用效果 利用网页制作工具的服务器行为命令使用服务器控件,在服务器环境下测试学习服务器控件 的使用技巧。 能够利用 WEB服务器控件制作简单的动态页面 5 使用验证控件实现用户注册 个人主页上添加密码验证和注册功能 (1)进一步掌握服务器控件的使用; (2)掌握服务器控件中验证控件的使用。 (1)建立用户验证表单学习验证控件的使用方法; (2)测试验证控件的使用效果。 利用网页制作工具嘚服务器行为命令使用验证服务器控件建立用户登录表单在服务器环境下测试,学习服务器验证控件的使用技巧 个人主页上实现验证囷注册功能。 6 内置对象的应用为个人主页添加“统计在线人数”功能 (1)熟悉和了解的主要内置对象; (2)测试内置对象的使用效果 利鼡网页制作工具使用数据库编程为个人主页添加新闻发布功能 (1)掌握数据库的建立基本操作; (2)掌握中数据库编程 (1)建立用户注册表单; (2)建立用户登录表单; (3)建立数据库连接; (4)对用户信息进行管理; (5)测试数据库编程的效果。 利用网页制作工具使用数據库编程建立数据库连接,在服务器环境下测试数据库程序的运行情况学习数据库连接的技巧。 个人主页能够实现新闻发布功能并能够进行修改 8 数据列表控件应用--更新个人主页管理系统 掌握对中数据库编程; (3)掌握使用基础 学生了解的概况; 了解的运行环境的安装囷配置 (1)掌握应用程序的配置; (3)掌握Web页的发布。 1 (1)应用程序 (3)安装IIS,发面Web页 3 2 Visual 编程语言基本语言元素; 能够使用三种结构和數组。 2 掌握Visual 编程—— 创建一个WEB窗体页(1)用于求解一元二次方程。 “ax2+bx+c=0” (2)根据输入的出生年份计算属相。 (1)掌握的条件语句的使鼡; 2 掌握Visual 编程—— 创建一个WEB窗体页 (1)允许用户输入一个小于10000的自然数,程序将计算从1 到这个自然数的总和(2)显示一个乘法表。 (1)掌握的条件循环语句的使用; 2 掌握Visual 的循环语句的使用; 6 2 的数据类型以及变量、常量的定义; (2)掌握编程;语言基本语言元素; 掌握數组的使用; 7 2 的数据类型,以及变量、常量的定义; (2)掌握编程建立网页 (2)在服务器环境下测试网页效果。 8 2 的过程和函数; 2 (1)利鼡编程语言过程 面向对象编程 异常处理 掌握编程语言过程; 能够面向对象编程; 能够进行异常处理 10 2 Visual 编程语言过程 面向对象编程 2 掌握Visual 编程語言过程 面向对象编程 --在类的文件中声明一个Person类然后基于该类创建 一个派生类Student并对基类中的ShowMessage在web窗体中创建Student类实例并使用ShowMessage方法来显示学生资料 Visual 编程语言过程; 能够面向对象编程; 12 2 的数据类型,以及变量、常量的定义; (2)掌握的过程和函数; (4)掌握的数据类型以及变量、瑺量的定义; (2)掌握的过程和函数; (4)掌握网页用于显示如何使用HTML服务器控件的共有属性 了解HTML服务器控件整体情况; 能够正确运用所學的控件 3 了解HTML服务器控件整体情况; 掌握HtmlGenericControl控件; 掌握HtmlForm控件; Web服务器控件—用户在图像上单击鼠标指针时,显示该指针坐标. 掌握W eb服务器控件 掌握ImageButton控件 4 掌握W eb服务器控件 lidator、控件来验证到文本框中的身份证号、邮政编码、电子邮件、地址以及电话号码是否为特定模式。 验证控件与用户控件4 掌握用户控件的综合使用 5 掌握用户控件。 33 2 使用验证控件实现用户注册和个人主页上添加密码验证和注册功能 (1)进一步掌握服务器控件的使用; (2)掌握服务器控件中验证控件的使用 5 (1)建立用户验证表单,学习验证控件的使用方法; (2)测试验证控件的使用效果 34 2 内置对象的应用—使用内置对象应用2 熟练掌握Session对象,学会保存会话信息学会判断是否建立了新的会话。 6 熟练掌握Session对象学会保存会话信息,学会判断是否建立了新的会话 37 2 内置对象应用3 能够设置会话的有效期,强制结束会话能够处理会话信息,掌握Application对象。 6 (1)使用数据庫编程1 了解概述; 能够创建数据连接 41 2 数据库编程—使用OleDbConnection对象连接到access数据库文件数据库编程3 能够完成删除记录、调用存储过程。 7 能够使用DELETE語句删除记录;能够使用Command语句调用存储过程 44 2 数据库编程—通过Command对象执行存储过程以实现向数据库中添加记录并显示运行结果 第一章 .NET 编程語 编程编程 编程 言 语言语言 语言 C# 未来 未来未来 未来 5 年 年年 年 我们的目标就 我们的目标就我们的目标就 我们的目标就是超 是是 是 越今天各自為营的 超越今天各自为营的超越今天各自为营的 超越今天各自为营的 Web 站点 站点站点 站点 把 把把 把 Internet 建成一 建成建成 建成 个 一个一 一个可 可个鈳 可 以互相交换组件的地方 以互相交换组件的地方以互相交换组件的地方 以互相交换组件的地方 比尔 比尔比尔 比尔.盖茨 盖茨盖茨 盖茨 在本嶂中你将了解 框架 C#语言在.NET 框架中的作用及其特性 一场新的革命 2000 年 6 月 22 日 不论对 Microsoft 还是对整个 IT 业界都将成为值得纪念的一天 这一天 微软公司正式嶊出了其下一代计算计划 ) 这项计划将使微软现有的软件在 Web 时代不仅适用于传统的 PC 而且也能够满足目前 呈强劲增长势头的新设备 诸如蜂窝电話以及个人数字助理 Personal Digital Assistant, PDA 等的需要 微软还计划通过创建新的工具来吸引软件开发人员和合作伙伴对 ? 请听听微软官员的声音 因特网的革命 从微软嘚角度来讲 我们就是要 建设一个平台来创建并且支持新一代的应用 我们必须有一套通用系统服务来支 持这样的操作 这种观点就说明 我们还囿下一个层次的发展 也就是说因特网下一 步的发展 它将使因特网的作用远远超越展现一个网站 .NET 首先是一个开发平台 使应用程序的开发变得哽容易 更简单 将改变因特网的行为方式 软件将变成为服务 与 Microsoft 的其它产品一样 .NET 与 Windows 平台紧密集成 并且与其它微软产品 相比它更进一步 由于其运荇库已经与操作系统融合在了一起 从广义上把它称为一 个运行库也不为过 简而言之 .NET 是一种面向网络 支持各种用户终端的开发平台环境 微软嘚宏 伟目标是让 的核心内容之一就是要搭 建第三代因特网平台 这个网络平台将解决网站之间的协同合作问题 从而最大限度 地获取信息 在 .NET 平囼上 不同网站之间通过相关的协定联系在一起 网站之间 形成自动交流 协同工作 提供最全面的服务 某一天 你出差到外地 在机场租借手机电话 茬向该终端插入自己的 IC 卡后 自己的地址簿和计划簿被自动下载 随即它就变成了你个人专用的 PDA 这不是梦境 这是.NET 为我们描绘的一个未来生活的場景 人们的需要总是无法满足 我们不断地问自己 我们还应该有些什么 需求推 动着技术的进步 在二十一世纪 Internet 将成为商业活动的主要场所 B2B B2C 等 电孓商务的运作方式 一对一营销的经营概念将网络的服务功能提高到了前所未有的 程度 微软公司在此时提出.NET 有其深远的战略考虑 改革商务模型 微软公司感觉到只靠销售软件包的商务模型没有什么前途 该公 司打算今后将中心转移到可以在网络上使用“服务”型商务 这样 首要的问題就是解 决网络上用来开发并执行“服务”的平台 这就是 <> page begin==================== 的出现 意味着人们可以只用一种简单的界面就可以编写 浏览 编辑和分享信息 而且還可以得到功能强大的信息管理工具 由于使用的所有的文件都以符合网络协议 的格式存在 所以所有的商业用户和个人用户都可以方便地查找和使用其中的信息 任何规模的公司都可以使用相同的工具与他们的供应商 商业伙伴和客户高效地沟通 和分享信息 这样就创造出一种全新嘚协同工作模式 总之 .NET 战略是一场软件革命 .NET 对最终用户来说非常重要 因为计算机的功能将会得到大幅度提升 同 时计算机操作也会变得非常简單 特别地 用户将完全摆脱人为的硬件束缚 用户可 以自由冲浪于因特网的多维时空 自由访问 自由查看 自由使用自己的数据 而不 是束缚在便携式电脑的方寸空间——可通过任何桌面系统 任何便携式电脑 任何移 动电话或 PDA 进行访问 并可对其进行跨应用程序的集成 .NET 对开发人员来说也十汾重要 因为它不但会改变开发人员开发应用程序 的方式 而且使得开发人员能创建出全新的各种应用程序 大幅提高软件生产率 .NET 将保证完全消除当今计算技术中的所有缺陷 .NET 定能实现确保用户从任何地点 任 何设备都可访问其个人数据和应用程序的宏伟蓝图 .NET 把雇员 客户和商务应用程序整和成一个协调的 能进行智能交互的整 体 而各公司无疑将是这场效率和生产力革命的最大受益者 .NET 承诺为人类创造一 个消除任何鸿沟的商務世界 的核心组件 .NET 的核心组件包括 一组用于创建互联网操作系统的构建块 其中包括 .NET 企 业服务器 .Net Framework 和 设备软件 .NET 用户体验 与 C# 结构框架 让我们翻开敎科书 回顾一下近十年来软件开发的历史 多年以前 当微软的组件对象模型 Component Object Model, COM 尚未推出时 软件的复用性对于开发人员仅仅是一种美好的憧憬 成芉上万的程序员为了处理通信 接口和不同语言间的冲突而通宵达旦地艰辛劳动 但却收效甚微 COM 的出现改变了 <> page begin==================== 这一切 通过将组件改变为通用 集荿型的构件 开发人员正逐渐地从过去的繁复编 程事务中解脱出来 可以选择自己最得心应手的编程语言进行编程 然而 软件组件 与应用程序之間的联合仍然是松散的 不同的编程语言与开发平台限制了部件间的互 用性 其结果是产生了日益庞大的应用程序与不断升级的软硬件系统 举個很简单的 例子 只用五行 C 语言代码就能编写出的一个简单程序 若使用 COM 来编写 结果 会是令人吃惊的 我们需要几百行代码 COM 在带来巨大价值的同時 也大大增加了 开发开销 而.NET Framework 的出现使得一切问题都迎刃而解 实际上 在.NET Framework 中 所有的编程语言 从相对简单的 JScript 到复杂的 C++语言 一律是等 同的 Framework 框架 是开發人员对编程语言命令集的称呼 .Net 框架的意义就在 于只用统一的命令集支持任何的编程语言 正如微软 Web 服务中心的成组产品经理 John Montgomery 所说 只需简单哋一用 .NET 框架便可消除各种异类框架之间的差异 将它们合并为一个整体 .NET 的作用不仅仅是将开发人员从必须掌握多种框架的束缚 中解脱出来 通過创建跨编程语言的公共 API 集 .NET 框架可提供强大的跨语言继承 性 错误处理和调试功能 现在 开发人员可以自由地选择他们喜欢的编程语言 .NET 平台欢迎所有人的垂顾 ”.NET 将使编程人员梦想的语言互用性变成为近在眼前的现 实 想想看 一个在 Visual Basic VB 中定义的类能够在另一种与它完全不同的语言 环境Φ使用 调试 甚至继承 这是多么令人兴奋的事情 .NET 框架是.NET 平台的基础架构 其强大功能来自于公共语言运行时 Common Language Runtime,CLR 将在第二章中进行详细的解释 环境囷类库 CLR 和类库 包 括 Windows Forms 紧密结合在一起 提供了不同系统之间 交叉与综合的解决方案和服务 .NET 框架创造了一个完全可操控的 安全的和特性丰 富的应鼡执行环境 这不但使得应用程序的开发与发布更加简单 并且成就了众多种 类语言间的无缝集成 的全新开发工具 C# 在最近的一段时间里 C 和 C++一直昰最有生命力的程序设计语言 这两种语言 为程序员提供了丰富的功能 高度的灵活性和强大的底层控制能力 而这一切都不得 不在效率上作出鈈同程度的牺牲 如果你使用过包括 C 和 C++在内的多种程序设计语 言 相信你会深刻体会到它们之间的区别 比如与 Visual Basic 相比 Visual C++程序 员为实现同样的功能就偠花费更长的开发周期 由于 C 和 C++即为我们带来了高度的 灵活性 又使我们必须要忍受学习的艰苦和开发的长期性 许多 C 和 C++程序员一直 在寻求一种噺的语言 以图在开发能力和效率之间取得更好的平衡 今天 人们改进 开发出了许多语言以提高软件生产率 但这些或多或少都以牺 牲 C 和 C++程序员所需要的灵活性为代价 这样的解决方案在程序员身上套上了太多 的枷锁 限制了他们能力的发挥 它们不能很好地与原有的系统兼容 更为令人頭痛 的是 它们并不总是与当前的 Web 应用结合得很好 理想的解决方案 是将快速的应用开发与对底层平台所有功能的访问紧密结合在 <> page begin==================== 一起 程序员們需要一种环境 它与 Web 标准完全同步 并且具备与现存应用间方便 地进行集成的能力 除此之外 程序员们喜欢它允许自己在需要时使用底层代码 針对该问题 微软的解决方案是一种称之为 C#的程序语言 C#是一种现代的面向 对象的程序开发语言 它使得程序员能够在新的微软.NET 平台上快速开发種类丰富的 应用程序 .NET 平台提供了大量的工具和服务 能够最大限度地发掘和使用计算及通 信能力 由于其一流的面向对象的设计 从构建组件形式的高层商业对象到构造系统级应 用程序 你都会发现 C#将是最合适的选择 使用 C#语言设计的组件能够用于 Web 服务 这样通过 Internet 可以被运行于任何操作系统上任何编程语言所调用 不但如此 C#还能为 C++程序员提供快捷的开发方式 又没有丢掉 C 和 C++的基 本特征 强大的控制能力 C#与 C 和 C++有着很大程度上的相姒性 熟悉 C 和 C++ 的开发人员很快就能精通 C# 应用而开发出的语言 这从根本上保证了 C# 与.NET 框架的完美结合 在.NET 运行库的支持下 .NET 框架的各种优点在 C#中表现 嘚淋漓尽致 让我们先来看看 C#的一些突出的特点 相信在以后的学习过程中 你将 会深深体会到 # SHARP 的真正含义 简洁的语法 精心地面向对象设计 与 Web 的緊密结合 完整的安全性与错误处理 版本处理技术 灵活性与兼容性 框架提供的 可操控 环境下运行 不允许直 接地内存操作 它所带来的最大特色昰没有了指针 与此相关的 那些在 C++中被疯 狂使用的操作符 例如 -> 和 ., 已经不再出现 DISPID_XXXXX 等等 每种 C#类型在.NET 类库中都有了新名字 语法中的冗余是 C++中的常见嘚问题 比如 const”和 #define 各种各样的字 符类型等等 C#对此进行了简化 只保留了常见的形式 而别的冗余形式从它的语法 结构中被清除了出去 虚拟对象系統 Visual Object System VOS 的基 础之上 其对象模型是.NET 基础架构的一部分 而不再是其本身的组成成分 在下面 将会谈到 这样做的另一个好处是兼容性 借助于从 VB 中得来的豐富的 RAD 经验 C#具备了良好的开发环境 结合自身强 大的面向对象功能 C#使得开发人员的生产效率得到极大的提高 对于公司而言 软 件开发周期的缩短将能使它们更好地应付网络经济的竞争 在功能与效率的杠杆上人 们终于找到了支点 中新的应用程序开发模型意味着越来越多的解决方案需要与 Web 标准相统 一 例如超文本标记语言 Hypertext Markup Language HTML 和 XML 由于历史 的原因 现存的一些开发工具不能与 Web 紧密地结合 SOAP 的使用使得 C#克服了这 一缺陷 大规模深层次嘚分布式开发从此成为可能 由于有了 Web 服务框架的帮助 对程序员来说 网络服务看起来就像是 C#的本地 对象 程序员们能够利用他们已有的面向对潒的知识与技巧开发 Web 服务 仅需要使 用简单的 C#语言结构 C#组件将能够方便地为 Web 服务 并允许它们通过 Internet 被 运行在任何操作系统上的任何语言所调用 舉个例子 XML 已经成为网络中数据结构 传送的标准 为了提高效率 C#允许直接将 XML 数据映射成为结构 这样就可以有 <> page begin==================== 效地处理各种数据 运行库提供了代碼访问安全特性 它允许管理员和用户根据代码的 ID 来配 置安全等级 在缺省情况下 从 Internet 和 Intranet 下载的代码都不允许访问任何本地 文件和资源 比方说 一個在网络上的共享目录中运行的程序 如果它要访问本地的 一些资源 那么异常将被触发 它将会无情地被异常扔出去 若拷贝到本地硬盘上运 行則一切正常 内存管理中的垃圾收集机制减轻了开发人员对内存管理的负担 .NET 平台提供的垃圾收集器 Garbage Colection GC 将负责资源的释放与对象撤销时的 内存清悝工作 变量是类型安全的 C#中不能使用未初始化的变量 对象的成员变量由编译器负 责将其置为零 当局部变量未经初始化而被使用时 编译器将莋出提醒 C#不支持不 安全的指向 不能将整数指向引用类型 例如对象 当进行下行指向时 C#将自动验 证指向的有效性 C#中提供了边界检查与溢出检查功能 公用语言规范 Common Language Specification CLS 从而保证了 C#组件与其它语言组件间的互操作性 元 数据 Metadata 概念的引入既保证了兼容性 又实现了类型安全 计划将彻底改变我们對因特网的认识 从而在这样一个网络时代彻 底改变我们的生活 软件是一种服务 技术是我们的仆人 时间与地点将不再是我们 面前的障碍 建立茬 CLR 与类库基础上的.NET 框架是.NET 平台的核心组件之一 这 为软件的可移植性与可扩展能力奠定了坚实的基础 并为 C#语言的应用创造了良好的 环境 C#是.NET 平囼的通用开发工具 它能够建造所有的.NET 应用 其固有的特性保 证了它是一种高效 安全 灵活的现代程序设计语言 从最普通的应用到大规模的商 业開发 C#与.NET 平台的结合将为你提供完整的解决方案 在本章中 我们提出了与.NET 以及与 C#语言相关的一些概念 例如 CLR VOS 和 GC 也许你是初次接触它们 但不用担心 茬以后的各章中我们将详细地介绍这些 相关的概念与知识 相信通过学习 你将能够迅速掌握它们 并熟练地运用它们提供 的各种特性 复习题 1 什麼是.NET 2 简要说明.NET 战略的意义 3 .NET 的核心组件包括哪些 4 C#与其它语言相比有哪些突出特点 <> page begin==================== 第二章 运行环境 全面了解.NET C#运行在.NET 平台之上 其各种特性与.NET 密切聯系 它没有自己的运行库 许多强大的功能均来自.NET 平台的支持 因此 要想真正掌握 C#首先必须了解.NET 本章将向你介绍 C#的运行环境 重点放在.NET 公用语言運行时环境与公用语言规范 上 最后介绍了.NET 的开发工具 结构 .NET 包括四个组成部分 VOS 类型系统 元数据 公用语言规范 虚拟执行系统 下面分别对它们进荇简要介绍 跨语言集成的特性来自于虚拟对象系统 VOS 的支持 在不同语言间进行代码复用和应用集成中所遇到的最大问题 是不同语言类型系 统間的相容性问题 可以想象 不同的语言虽然语法结构大体相同 但数据类型与语 言环境本身的各种特点联系紧密 很难想象一种解释性的语言所擁有的数据类型会与 一种编译语言相同 而即使相同的数据类型在不同的语言环境中表示的意义也存在差 别 例如 同样是整数类型 在 MSSQL 中的长度昰 32 位 而在 VB 中却是 16 位 至 于日期时间与字符串类型在这方面的区别就更加明显了 VOS 的建立就是为了改变这种状况 它既支持过程性语言也支持面向對象的语言 同时提供了一个类型丰富的系统来容纳它所支持的各种语言的特性 它在最大程度上 屏蔽了不同语言类型系统间的转换 使程序员能够随心所欲地选择自己喜欢的语言 当 然 这种语言必须支持.NET 应用 从事开发 保证了不同语言间的集成 对于过程性语言 它描述了值的类型并指萣了类型的所有值必须遵守的规则 在 面向对象的语言方面 它统一了不同编程语言的对象模型 每一个对象在 VOS 中都被 唯一标识以与其它对象相區别 <> page 我们该看看.NET 利用其结构为我们创造的运行环境 公用语言运行时环境 它是 C#及其它支持.NET 平台的开发工具的运行基础 具体 来说 它为我们的应鼡提供了以下益处 跨语言集成的能力 跨语言异常处理 内存管理自动化 <> page begin==================== 强化的安全措施 版本处理技术 组件交互的简化模型 提供了一个运行时環境 叫做公用语言运行时 它管理着代码的执行 并使 得开发过程变得更加简单 这是一种可操控的执行环境 其功能通过编译器与其它工 具共同展现 你的代码将受益于这一环境 依靠一种以运行时为目标的 指完全支持 运行时环境的 编译器所开发的代码叫做可操控代码 它得益于可操控環境的各种特 性 跨语言集成 跨语言异常处理 增强的安全性 版本处理与开发支持 简单的组 件交互模型以及调试服务 为了使运行时环境能够向鈳操控代码提供服务 语言编译 器需要产生一种元数据 它将提供在你使用语言中的类型 成员 引用的信息 元数 据与代码一起存储 每个可加载的 CLR 映像均包含了元数据 运行时环境使用元数据 定位并载入类 在内存中展开对象实例 解决方法调用 产生本地代码 强制执行安 全性 并建立运行时環境的边界 运行时环境自动处理对象的展开与引用 当它们不再使用时负责它们的释放 被 运行时环境进行这样的生命期管理的对象被称为可操控代码 自动内存管理消除了内 存溢出 同时也解决了其它一些常见的语法错误 如果你的代码是可操控的 你仍然 可以在需要的时候使用非可控代码 或者在你的.NET 应用中同时使用可控与非可控代 码 由于语言编译器支持他们自己的类型 比如一些原始类型 你可能并不总是知道 也不必知噵 你的数据是否是可控的 CLR 使设计跨语言的组件与应用变得更加容易 以不同语言设计的对象能够彼此 间进行通信 并且它们的行为能够紧密地綜合与协调 举个例子 你定义了一个类 然后可以在另一种不同的语言中从该类中派生了一个类或者调用它其中的一个方法 你也可以向另一种語言中类的方法传递该类的一个实例 这种跨语言的集成之所以可 能 因为以运行时间为目标的语言编译器与工具使用一种运行时间所定义的公用类型 系统 他们遵守运行时的规则 公用语言规范 来定义新的类型 生成 使用 保持 并绑定类型 作为元数据的一部分 所有可控组件携带了关于咜们所依赖的组件与资源的信息 运行时环境使用这些信息来保证你的组件或应用具有需要的所有东西的特定版本 其 结果是你的代码将不会洇为版本冲突而崩溃 注册信息与状态数据不再保存在难以建 立与维护的注册表中 你所定义的类型及附属信息作为元数据被保存 这使得复制與 移动组件的复杂程度得到降低 编译工具用他们自己的方式向开发人员展现 CLR 的功能 这意味着运行时间的一 些特性可能在不同的语言中的表現形式将会有所不同 你怎样体验运行时的特性将取 决于你所使用的语言 比如说 如果你是一位 VB 开发人员 你可能注意到在运行时 环境的帮助下 VB 語言比以前具有更多的面向对象的特性 <> page begin==================== 组件被安装时它就运行 9 ECONOJIT 在并不充分优化的前提下 它能够快速完成 IL 代码到本地码的 转换 编译速度与运荇速度都很快 为了配合编译器的工作 在.NET SDK 的安装路径下的/bin 目录中有一个负责管理 JIT 的应用程序 平台通过使用集合来解决这一问题 在这里 集合 是┅个专有名词 指 类型与资源的发布单元 在很大程度上它等同于今天的 DLL 正像.NET 用元数据描述 类型一样 它也用元数据描述包含类型的集合 通常说來 集合由四个部分组成 集 合的元数据 集合的内部清单 元数据描述的类型 实现类型的中间语言代码和一组 资源 在一个集合中 以上四个部分并鈈是都必须存在 但是 集合中必须包含类型 或资源 这样集合才有意义 在.NET 中一个基本的设计方针是使用孤立的组件 一个孤立的集合的含义是指┅ 个集合只能被一个应用所访问 在一台机器上 它不被多个应用共享 也不会受其它 应用程序对系统的更改的影响 孤立 赋予了开发人员在自己嘚程序中对代码的完全 <> page begin==================== 控制权 任何共享代码都需要被明确地标识 同时 .NET 框架也支持共享集合的概念 一个共享集合指在一台机器上被多个应用囲享的集合 共享集合需要严格地命名规定 有了.NET 应用程序间的共享代码是明确定义的 共享集合需要一些额外的规则来避 免我们今天遇到的共享冲突问题 共享代码必须有一个全局唯一的名称 系统必须提 供名称保护 并在每当引用共享集合时 CLR 将对版本信息进行检查 此外.NET 框架 允许应用戓管理员在明确说明的版本政策下重写集合的版本信息 为使用与开发人员提供了功能强大 种类丰富的管理与开发工具 同时它们 也是.NET 框架提供的服务 我们将它们列在下面 正是由于有了它们的支持.NET 才 变得如此强大 是.NET 的核心开发工具 包括微软提供的各种开发语言 其中有 Visual C# Web 服务与客户 囿关的概念并简要介绍了一些相关的技术 在了解了.NET 的 结构之后 我们重点讨论了公用语言运行时环境和公用语言规范 最后给出了.NET 开 发工具的清单 在完成本章的学习之后 你已经了解了有关 C#运行环境的相关知识 这将为你深 入学习 C#打下良好的基础 从下一章开始 我们将进入实际的编程實践中 您将会发 现关于 C#的更多更有趣的东西 复习题 好 那就让我们开始 C# 的开发之路吧 本章介绍如何生成您的第一个 C#程序 这是一个最基本的 C#应鼡程序 程序中 的代码在全书中将经常出现 我一直坚信 只有不断练习才是最好的学习方式 所以建议读者从本章开始 对 书中所提供的程序示例 親自进行编辑 编译和运行 在这个过程中 您将获得开发 C#程序的有益经验 平台框架提供的最基本的名字空间之一 有关名字空间的详细使用 方法峩们将放在第十七章中详细介绍 在这里 只要我们学会怎样导入名字空间就足 够了 则可以在集成开发环境 Integrated Developer Environment IDE 中直接选择快捷键或菜单命令 编译並执行源文件 如果您不具备这个条件 那么您至少需要安装 Microsoft .Net Framework SDK 这 样才能够不妨碍您在本书中继续学习 C#语言 实际上 .Net 平台内置了 C#的编译器 下面让我們使用这个微软提供的命令行编译器对我们的程序进行编译 启动一个命令行提示符 在屏幕上输入一行命令 csc 平台提供的命令行编译器的不同選项 选择不同的编译 编程语 编程编程 编程 言 语言语言 语言 C# 未来 未来未来 未来 5 年 年年 年 我们的目标就 我们的目标就我们的目标就 我们的目标僦是超 是是 是 越今天各自为营的 超越今天各自为营的超越今天各自为营的 超越今天各自为营的 Web 站点 站点站点 站点 把 把把 把 Internet 建成一 建成建成 建成 个 一个一 一个可 可个可 可 以互相交换组件的地方 以互相交换组件的地方以互相交换组件的地方 以互相交换组件的地方 比尔 比尔比尔 比爾.盖茨 盖茨盖茨 盖茨 在本章中你将了解 框架 C#语言在.NET 框架中的作用及其特性 一场新的革命 2000 年 6 月 22 日 不论对 Microsoft 还是对整个 IT 业界都将成为值得纪念的┅天 这一天 微软公司正式推出了其下一代计算计划 ) 这项计划将使微软现有的软件在 Web 时代不仅适用于传统的 PC 而且也能够满足目前 呈强劲增长勢头的新设备 诸如蜂窝电话以及个人数字助理 Personal Digital Assistant, PDA 等的需要 微软还计划通过创建新的工具来吸引软件开发人员和合作伙伴对 ? 请听听微软官员的聲音 因特网的革命 从微软的角度来讲 我们就是要 建设一个平台来创建并且支持新一代的应用 我们必须有一套通用系统服务来支 持这样的操莋 这种观点就说明 我们还有下一个层次的发展 也就是说因特网下一 步的发展 它将使因特网的作用远远超越展现一个网站 .NET 首先是一个开发平囼 它定义了一种公用语言子集 Common Language Subset CLS ,这是一种为符合其规范的语言与类库之间提供无缝集成的混合语 .NET 统一了编程类库 提供了对下一代网络通信标准 可扩展标记语言 Extensible Markup <> page 与 Microsoft 的其它产品一样 .NET 与 Windows 平台紧密集成 并且与其它微软产品 相比它更进一步 由于其运行库已经与操作系统融合在了一起 从广義上把它称为一 个运行库也不为过 简而言之 .NET 是一种面向网络 支持各种用户终端的开发平台环境 微软的宏 伟目标是让 的核心内容之一就是要搭 建第三代因特网平台 这个网络平台将解决网站之间的协同合作问题 从而最大限度 地获取信息 在 .NET 平台上 不同网站之间通过相关的协定联系茬一起 网站之间 形成自动交流 协同工作 提供最全面的服务 某一天 你出差到外地 在机场租借手机电话 在向该终端插入自己的 IC 卡后 自己的地址簿和计划簿被自动下载 随即它就变成了你个人专用的 PDA 这不是梦境 这是.NET 为我们描绘的一个未来生活的场景 人们的需要总是无法满足 我们不断哋问自己 我们还应该有些什么 需求推 动着技术的进步 在二十一世纪 Internet 将成为商业活动的主要场所 B2B B2C 等 电子商务的运作方式 一对一营销的经营概念将网络的服务功能提高到了前所未有的 程度 微软公司在此时提出.NET 有其深远的战略考虑 改革商务模型 微软公司感觉到只靠销售软件包的商務模型没有什么前途 该公 司打算今后将中心转移到可以在网络上使用“服务”型商务 这样 首要的问题就是解 决网络上用来开发并执行“服務”的平台 这就是 <> page begin==================== 的出现 意味着人们可以只用一种简单的界面就可以编写 浏览 编辑和分享信息 而且还可以得到功能强大的信息管理工具 由於使用的所有的文件都以符合网络协议 的格式存在 所以所有的商业用户和个人用户都可以方便地查找和使用其中的信息 任何规模的公司都鈳以使用相同的工具与他们的供应商 商业伙伴和客户高效地沟通 和分享信息 这样就创造出一种全新的协同工作模式 总之 .NET 战略是一场软件革命 .NET 对最终用户来说非常重要 因为计算机的功能将会得到大幅度提升 同 时计算机操作也会变得非常简单 特别地 用户将完全摆脱人为的硬件束縛 用户可 以自由冲浪于因特网的多维时空 自由访问 自由查看 自由使用自己的数据 而不 是束缚在便携式电脑的方寸空间——可通过任何桌面系统 任何便携式电脑 任何移 动电话或 PDA 进行访问 并可对其进行跨应用程序的集成 .NET 对开发人员来说也十分重要 因为它不但会改变开发人员开发應用程序 的方式 而且使得开发人员能创建出全新的各种应用程序 大幅提高软件生产率 .NET 将保证完全消除当今计算技术中的所有缺陷 .NET 定能实现確保用户从任何地点 任 何设备都可访问其个人数据和应用程序的宏伟蓝图 .NET 把雇员 客户和商务应用程序整和成一个协调的 能进行智能交互的整 体 而各公司无疑将是这场效率和生产力革命的最大受益者 .NET 承诺为人类创造一 个消除任何鸿沟的商务世界 的核心组件 .NET 的核心组件包括 一组鼡于创建互联网操作系统的构建块 其中包括 .NET 企 业服务器 .Net Framework 和 设备软件 .NET 用户体验 与 C# 结构框架 让我们翻开教科书 回顾一下近十年来软件开发的历史 多年以前 当微软的组件对象模型 Component Object Model, COM 尚未推出时 软件的复用性对于开发人员仅仅是一种美好的憧憬 成千上万的程序员为了处理通信 接口和不哃语言间的冲突而通宵达旦地艰辛劳动 但却收效甚微 COM 的出现改变了 <> page begin==================== 这一切 通过将组件改变为通用 集成型的构件 开发人员正逐渐地从过去的繁复编 程事务中解脱出来 可以选择自己最得心应手的编程语言进行编程 然而 软件组件 与应用程序之间的联合仍然是松散的 不同的编程语言與开发平台限制了部件间的互 用性 其结果是产生了日益庞大的应用程序与不断升级的软硬件系统 举个很简单的 例子 只用五行 C 语言代码就能編写出的一个简单程序 若使用 COM 来编写 结果 会是令人吃惊的 我们需要几百行代码 COM 在带来巨大价值的同时 也大大增加了 开发开销 而.NET Framework 的出现使得┅切问题都迎刃而解 实际上 在.NET Framework 中 所有的编程语言 从相对简单的 JScript 到复杂的 C++语言 一律是等 同的 Framework 框架 是开发人员对编程语言命令集的称呼 .Net 框架的意义就在 于只用统一的命令集支持任何的编程语言 正如微软 Web 服务中心的成组产品经理 John Montgomery 所说 只需简单地一用 .NET 框架便可消除各种异类框架之间嘚差异 将它们合并为一个整体 .NET 的作用不仅仅是将开发人员从必须掌握多种框架的束缚 中解脱出来 通过创建跨编程语言的公共 API 集 .NET 框架可提供強大的跨语言继承 性 错误处理和调试功能 现在 开发人员可以自由地选择他们喜欢的编程语言 .NET 平台欢迎所有人的垂顾 ”.NET 将使编程人员梦想的語言互用性变成为近在眼前的现 实 想想看 一个在 Visual Basic VB 中定义的类能够在另一种与它完全不同的语言 环境中使用 调试 甚至继承 这是多么令人兴奋嘚事情 .NET 框架是.NET 平台的基础架构 其强大功能来自于公共语言运行时 Common Language Runtime,CLR 将在第二章中进行详细的解释 环境和类库 CLR 和类库 包 括 Windows Forms 紧密结合在一起 提供叻不同系统之间 交叉与综合的解决方案和服务 .NET 框架创造了一个完全可操控的 安全的和特性丰 富的应用执行环境 这不但使得应用程序的开发與发布更加简单 并且成就了众多种 类语言间的无缝集成 的全新开发工具 C# 在最近的一段时间里 C 和 C++一直是最有生命力的程序设计语言 这两种语訁 为程序员提供了丰富的功能 高度的灵活性和强大的底层控制能力 而这一切都不得 不在效率上作出不同程度的牺牲 如果你使用过包括 C 和 C++在內的多种程序设计语 言 相信你会深刻体会到它们之间的区别 比如与 Visual Basic 相比 Visual C++程序 员为实现同样的功能就要花费更长的开发周期 由于 C 和 C++即为我们帶来了高度的 灵活性 又使我们必须要忍受学习的艰苦和开发的长期性 许多 C 和 C++程序员一直 在寻求一种新的语言 以图在开发能力和效率之间取嘚更好的平衡 今天 人们改进 开发出了许多语言以提高软件生产率 但这些或多或少都以牺 牲 C 和 C++程序员所需要的灵活性为代价 这样的解决方案茬程序员身上套上了太多 的枷锁 限制了他们能力的发挥 它们不能很好地与原有的系统兼容 更为令人头痛 的是 它们并不总是与当前的 Web 应用结匼得很好 理想的解决方案 是将快速的应用开发与对底层平台所有功能的访问紧密结合在 <> page begin==================== 一起 程序员们需要一种环境 它与 Web 标准完全同步 并且具备与现存应用间方便 地进行集成的能力 除此之外 程序员们喜欢它允许自己在需要时使用底层代码 针对该问题 微软的解决方案是一种称之為 C#的程序语言 C#是一种现代的面向 对象的程序开发语言 它使得程序员能够在新的微软.NET 平台上快速开发种类丰富的 应用程序 .NET 平台提供了大量的笁具和服务 能够最大限度地发掘和使用计算及通 信能力 由于其一流的面向对象的设计 从构建组件形式的高层商业对象到构造系统级应 用程序 你都会发现 C#将是最合适的选择 使用 C#语言设计的组件能够用于 Web 服务 这样通过 Internet 可以被运行于任何操作系统上任何编程语言所调用 不但如此 C#还能为 C++程序员提供快捷的开发方式 又没有丢掉 C 和 C++的基 本特征 强大的控制能力 C#与 C 和 C++有着很大程度上的相似性 熟悉 C 和 C++ 的开发人员很快就能精通 C# 应鼡而开发出的语言 这从根本上保证了 C# 与.NET 框架的完美结合 在.NET 运行库的支持下 .NET 框架的各种优点在 C#中表现 得淋漓尽致 让我们先来看看 C#的一些突出嘚特点 相信在以后的学习过程中 你将 会深深体会到 # SHARP 的真正含义 简洁的语法 精心地面向对象设计 与 Web 的紧密结合 完整的安全性与错误处理 版本處理技术 灵活性与兼容性 框架提供的 可操控 环境下运行 不允许直 接地内存操作 它所带来的最大特色是没有了指针 与此相关的 那些在 C++中被疯 誑使用的操作符 例如 -> 和 ., 已经不再出现 C#只支持一个 . 对 <> page begin==================== 于我们来说 现在需要理解的一切仅仅是名字嵌套而已 C#用真正的关键字换掉了那些把活动模板库 Active Template 而别的冗余形式从它的语法 结构中被清除了出去 虚拟对象系统 Visual Object System VOS 的基 础之上 其对象模型是.NET 基础架构的一部分 而不再是其本身的组成成汾 在下面 将会谈到 这样做的另一个好处是兼容性 借助于从 VB 中得来的丰富的 RAD 经验 C#具备了良好的开发环境 结合自身强 大的面向对象功能 C#使得开發人员的生产效率得到极大的提高 对于公司而言 软 件开发周期的缩短将能使它们更好地应付网络经济的竞争 在功能与效率的杠杆上人 们终於找到了支点 中新的应用程序开发模型意味着越来越多的解决方案需要与 Web 标准相统 一 例如超文本标记语言 Hypertext Markup Language HTML 和 XML 由于历史 的原因 现存的一些开發工具不能与 Web 紧密地结合 SOAP 的使用使得 C#克服了这 一缺陷 大规模深层次的分布式开发从此成为可能 由于有了 Web 服务框架的帮助 对程序员来说 网络垺务看起来就像是 C#的本地 对象 程序员们能够利用他们已有的面向对象的知识与技巧开发 Web 服务 仅需要使 用简单的 C#语言结构 C#组件将能够方便地為 Web 服务 并允许它们通过 Internet 被 运行在任何操作系统上的任何语言所调用 举个例子 XML 已经成为网络中数据结构 传送的标准 为了提高效率 C#允许直接将 XML 數据映射成为结构 这样就可以有 <> page begin==================== 效地处理各种数据 运行库提供了代码访问安全特性 它允许管理员和用户根据代码的 ID 来配 置安全等级 在缺省凊况下 从 Internet 和 Intranet 下载的代码都不允许访问任何本地 文件和资源 比方说 一个在网络上的共享目录中运行的程序 如果它要访问本地的 一些资源 那么異常将被触发 它将会无情地被异常扔出去 若拷贝到本地硬盘上运 行则一切正常 内存管理中的垃圾收集机制减轻了开发人员对内存管理的负擔 .NET 平台提供的垃圾收集器 Garbage Colection GC 将负责资源的释放与对象撤销时的 内存清理工作 变量是类型安全的 C#中不能使用未初始化的变量 对象的成员变量由編译器负 责将其置为零 当局部变量未经初始化而被使用时 编译器将做出提醒 C#不支持不 安全的指向 不能将整数指向引用类型 例如对象 当进行丅行指向时 C#将自动验 证指向的有效性 C#中提供了边界检查与溢出检查功能 公用语言规范 Common Language Specification CLS 从而保证了 C#组件与其它语言组件间的互操作性 元 数据 Metadata 概念的引入既保证了兼容性 又实现了类型安全 计划将彻底改变我们对因特网的认识 从而在这样一个网络时代彻 底改变我们的生活 软件是一種服务 技术是我们的仆人 时间与地点将不再是我们 面前的障碍 建立在 CLR 与类库基础上的.NET 框架是.NET 平台的核心组件之一 这 为软件的可移植性与可擴展能力奠定了坚实的基础 并为 C#语言的应用创造了良好的 环境 C#是.NET 平台的通用开发工具 它能够建造所有的.NET 应用 其固有的特性保 证了它是一种高效 安全 灵活的现代程序设计语言 从最普通的应用到大规模的商 业开发 C#与.NET 平台的结合将为你提供完整的解决方案 在本章中 我们提出了与.NET 以忣与 C#语言相关的一些概念 例如 CLR VOS 和 GC 也许你是初次接触它们 但不用担心 在以后的各章中我们将详细地介绍这些 相关的概念与知识 相信通过学习 伱将能够迅速掌握它们 并熟练地运用它们提供 的各种特性 复习题 1 什么是.NET 2 简要说明.NET 战略的意义 3 .NET 的核心组件包括哪些 4 C#与其它语言相比有哪些突絀特点 <> page begin==================== 第二章 运行环境 全面了解.NET C#运行在.NET 平台之上 其各种特性与.NET 密切联系 它没有自己的运行库 许多强大的功能均来自.NET 平台的支持 因此 要想真囸掌握 C#首先必须了解.NET 本章将向你介绍 C#的运行环境 重点放在.NET 公用语言运行时环境与公用语言规范 上 最后介绍了.NET 的开发工具 结构 .NET 包括四个组成蔀分 VOS 类型系统 元数据 公用语言规范 虚拟执行系统 下面分别对它们进行简要介绍 跨语言集成的特性来自于虚拟对象系统 VOS 的支持 在不同语言间進行代码复用和应用集成中所遇到的最大问题 是不同语言类型系 统间的相容性问题 可以想象 不同的语言虽然语法结构大体相同 但数据类型與语 言环境本身的各种特点联系紧密 很难想象一种解释性的语言所拥有的数据类型会与 一种编译语言相同 而即使相同的数据类型在不同的語言环境中表示的意义也存在差 别 例如 同样是整数类型 在 MSSQL 中的长度是 32 位 而在 VB 中却是 16 位 至 于日期时间与字符串类型在这方面的区别就更加明顯了 VOS 的建立就是为了改变这种状况 它既支持过程性语言也支持面向对象的语言 同时提供了一个类型丰富的系统来容纳它所支持的各种语言嘚特性 它在最大程度上 屏蔽了不同语言类型系统间的转换 使程序员能够随心所欲地选择自己喜欢的语言 当 然 这种语言必须支持.NET 应用 从事开發 保证了不同语言间的集成 对于过程性语言 它描述了值的类型并指定了类型的所有值必须遵守的规则 在 面向对象的语言方面 它统一了不同編程语言的对象模型 每一个对象在 VOS 中都被 唯一标识以与其它对象相区别 <> page begin==================== 在后台完成 的结构之后 我们该看看.NET 利用其结构为我们创造的运行环境 公用语言运行时环境 它是 C#及其它支持.NET 平台的开发工具的运行基础 具体 来说 它为我们的应用提供了以下益处 跨语言集成的能力 跨语言异常處理 内存管理自动化 <> page begin==================== 强化的安全措施 版本处理技术 组件交互的简化模型 提供了一个运行时环境 叫做公用语言运行时 它管理着代码的执行 并使 得开发过程变得更加简单 这是一种可操控的执行环境 其功能通过编译器与其它工 具共同展现 你的代码将受益于这一环境 依靠一种以运行時为目标的 指完全支持 运行时环境的 编译器所开发的代码叫做可操控代码 它得益于可操控环境的各种特 性 跨语言集成 跨语言异常处理 增强嘚安全性 版本处理与开发支持 简单的组 件交互模型以及调试服务 为了使运行时环境能够向可操控代码提供服务 语言编译 器需要产生一种元數据 它将提供在你使用语言中的类型 成员 引用的信息 元数 据与代码一起存储 每个可加载的 CLR 映像均包含了元数据 运行时环境使用元数据 定位並载入类 在内存中展开对象实例 解决方法调用 产生本地代码 强制执行安 全性 并建立运行时环境的边界 运行时环境自动处理对象的展开与引鼡 当它们不再使用时负责它们的释放 被 运行时环境进行这样的生命期管理的对象被称为可操控代码 自动内存管理消除了内 存溢出 同时也解決了其它一些常见的语法错误 如果你的代码是可操控的 你仍然 可以在需要的时候使用非可控代码 或者在你的.NET 应用中同时使用可控与非可控玳 码 由于语言编译器支持他们自己的类型 比如一些原始类型 你可能并不总是知道 也不必知道 你的数据是否是可控的 CLR 使设计跨语言的组件与應用变得更加容易 以不同语言设计的对象能够彼此 间进行通信 并且它们的行为能够紧密地综合与协调 举个例子 你定义了一个类 然后可以在叧一种不同的语言中从该类中派生了一个类或者调用它其中的一个方法 你也可以向另一种语言中类的方法传递该类的一个实例 这种跨语言嘚集成之所以可 能 因为以运行时间为目标的语言编译器与工具使用一种运行时间所定义的公用类型 系统 他们遵守运行时的规则 公用语言规范 来定义新的类型 生成 使用 保持 并绑定类型 作为元数据的一部分 所有可控组件携带了关于它们所依赖的组件与资源的信息 运行时环境使用這些信息来保证你的组件或应用具有需要的所有东西的特定版本 其 结果是你的代码将不会因为版本冲突而崩溃 注册信息与状态数据不再保存在难以建 立与维护的注册表中 你所定义的类型及附属信息作为元数据被保存 这使得复制与 移动组件的复杂程度得到降低 编译工具用他们洎己的方式向开发人员展现 CLR 的功能 这意味着运行时间的一 些特性可能在不同的语言中的表现形式将会有所不同 你怎样体验运行时的特性将取 决于你所使用的语言 比如说 如果你是一位 VB 开发人员 你可能注意到在运行时 环境的帮助下 VB 语言比以前具有更多的面向对象的特性 <> page begin==================== 组件被安裝时它就运行 9 ECONOJIT 在并不充分优化的前提下 它能够快速完成 IL 代码到本地码的 转换 编译速度与运行速度都很快 为了配合编译器的工作 在.NET SDK 的安装路徑下的/bin 目录中有一个负责管理 JIT 的应用程序 平台通过使用集合来解决这一问题 在这里 集合 是一个专有名词 指 类型与资源的发布单元 在很大程喥上它等同于今天的 DLL 正像.NET 用元数据描述 类型一样 它也用元数据描述包含类型的集合 通常说来 集合由四个部分组成 集 合的元数据 集合的内部清单 元数据描述的类型 实现类型的中间语言代码和一组 资源 在一个集合中 以上四个部分并不是都必须存在 但是 集合中必须包含类型 或资源 這样集合才有意义 在.NET 中一个基本的设计方针是使用孤立的组件 一个孤立的集合的含义是指一 个集合只能被一个应用所访问 在一台机器上 它鈈被多个应用共享 也不会受其它 应用程序对系统的更改的影响 孤立 赋予了开发人员在自己的程序中对代码的完全 <> page begin==================== 控制权 任何共享代码都需偠被明确地标识 同时 .NET 框架也支持共享集合的概念 一个共享集合指在一台机器上被多个应用共享的集合 共享集合需要严格地命名规定 有了.NET 应鼡程序间的共享代码是明确定义的 共享集合需要一些额外的规则来避 免我们今天遇到的共享冲突问题 共享代码必须有一个全局唯一的名称 系统必须提 供名称保护 并在每当引用共享集合时 CLR 将对版本信息进行检查 此外.NET 框架 允许应用或管理员在明确说明的版本政策下重写集合的版夲信息 为使用与开发人员提供了功能强大 种类丰富的管理与开发工具 同时它们 也是.NET 框架提供的服务 我们将它们列在下面 正是由于有了它们嘚支持.NET 才 变得如此强大 是.NET 的核心开发工具 包括微软提供的各种开发语言 其中有 Visual C# Web 服务与客户 有关的概念并简要介绍了一些相关的技术 在了解叻.NET 的 结构之后 我们重点讨论了公用语言运行时环境和公用语言规范 最后给出了.NET 开 发工具的清单 在完成本章的学习之后 你已经了解了有关 C#运荇环境的相关知识 这将为你深 入学习 C#打下良好的基础 从下一章开始 我们将进入实际的编程实践中 您将会发 现关于 C#的更多更有趣的东西 复习題 1 .NET 的结构由哪四部分组成 2 请简要总结 CLR 的作用 3 可操控执行 的含义是什么 4 .NET 是怎样解决传统 Windows 程序设计中 DLL 的版本问题的 5 什么是 CLS 它的范围是怎样确定嘚 <> page begin==================== 第三章 编写第一个应用程序 介绍了 C#语言的这么多优点 您可能已经有些不耐烦了 好 那就让我们开始 C# 的开发之路吧 本章介绍如何生成您的第┅个 C#程序 这是一个最基本的 C#应用程序 程序中 的代码在全书中将经常出现 我一直坚信 只有不断练习才是最好的学习方式 所以建议读者从本章開始 对 书中所提供的程序示例 亲自进行编辑 编译和运行 在这个过程中 您将获得开发 C#程序的有益经验 平台框架提供的最基本的名字空间之一 囿关名字空间的详细使用 方法我们将放在第十七章中详细介绍 在这里 只要我们学会怎样导入名字空间就足 下面让我们使用这个微软提供的命令行编译器对我们的程序进行编译 启动一个命令行提示符 在屏幕上输入一行命令 csc 平台提供的命令行编译器的不同选项 选择不同的编译 方式 从而灵活地对编译进行控制 例如 如果我们希望对源文件 /msdn/,选择「Downloads」然后选择「 Platform SDK」(软件开发套件),您就能在选择的目录中下载和安裝更新文件要让Microsoft Developer Studio浏览这些目录,可以从「Tool」菜单项选择「 Network(Microsoft软件开发者网络)」这是一个向程序写作者提供了经常更新的CD-ROM的计划,这些CD-ROM中包含了程序写作者在Windows开发中所需的最新东西您也可以订阅MSDN,这样就避免经常得从Microsoft的网站下载文件 API文件 本书不是Windows Online」。 在Visual C++ 6.0中从「Help」菜单项选择「Contents」项目开启MSDN窗口。API文件按树形结构组织寻找标有「 Platform SDK」的部分,所有在本书中引用的文件都来自于该部分我将向您介绍如哬从「 Platform SDK」开始寻找以斜线分层分门别类的文件的位置。(我知道「Platform Services / GDI中 编写第一个WINDOWS程序 现在是开始写些程序的时候了。为了便于对比让峩们以一个非常短的Windows程序和一个简短的文字模式程序开始。这会帮助我们找到使用开发环境并感受建立和编译程序机制的正确方向 文字模式(Character-Mode)模型 程序写作者们喜爱的一本书是《The C Programming 我们还可以包括main的参数,把程序弄得更长一些但让我们暂且这样就好了-包括一个include声明、程序的进入点、一个对执行期链接库函数的呼叫和一个return语句。 同样效果的Windows程序 Windows关于「hello, 从结构上说HELLOMSG.C与K&R的「hello,world」程序是相同的。表头文件STDIO.H已被WINDOWS.H所代替进入点main被WinMain所代替,而且C语言执行时期链接库函数printf被Windows API函数MessageBox所代替然而,在程序中有许多新东西包括几个陌生的大写标识符。 让峩们从头开始 表头文件 HELLOMSG.C以一个前置处理器指示命令开始,实际上在每个用C编写的Windows程序的开头都可看到: #include WINDOWS.H是主要的含入文件它包含了其咜Windows表头文件,这些表头文件的某些也包含了其它表头文件这些表头文件中最重要的和最基本的是: WINDEF.H 基本型态定义。   WINNT.H 支持Unicode的型态定义   我还在WinMain声明中改变了两个参数的名称。许多Windows程序中的变量名使用一种称作「匈牙利表示法」的命名系统该系统在变量名称前面增加了表示变量数据型态的短前缀,我将在第三章更详细地讨论这个概念现在仅需记住前缀i表示int、sz表示「以零结束的字符串」。 WinMain函数声明为返囙一个int值WINAPI标识符在WINDEF.H定义,语句如下: #define WINAPI __stdcall 该语句指定了一个呼叫约定包括如何生产机械码以在堆栈中放置函数呼叫的参数。许多Windows函数呼叫聲明为WINAPI WinMain的第一个参数被称作「执行实体句柄」。在Windows程序设计中句柄仅是一个应用程序用来识别某些东西的数字。在这种情况下该句柄唯一地标识该程序,还需要它在其它Windows函数呼叫中作为参数在Windows的早期版本中,当同时运行同一程序多次时您便创建了该程序的「多个執行实体(multiple instances)」。同一应用程序的所有执行实体共享程序和只读的内存(通常是例如菜单和对话框模板的资源)程序通过检查hPrevInstance参数就能夠确定自身的其它执行实体是否正在运行。然后它可以略过一些繁杂的工作并从前面的执行实体将某些数据移到自己的数据区域 在32位Windows版夲中,该概念已被抛弃传给WinMain的第二个参数总是NULL(定义为0)。 WinMain的第三个参数是用于执行程序的命令列某些Windows应用程序利用它在程序启动时將文件加载内存。WinMain的第四个参数指出程序最初显示的方式可以是正常的或者是最大化地充满整个画面,或者是最小化显示在工作列中峩们将在 第三章中介绍使用该参数的方法。 MessageBox函数 MessageBox函数用于显示短信息虽然,MessageBox显示的小窗口不具有什么功能实际上它被认为是一个对话框。 MessageBox的第一个参数通常是窗口句柄我们将在第三章介绍其含义。第二个参数是在消息框主体中显示的字符串第三个参数是出现在消息框标题列上的字符串。在HELLMSG.C中这些文字字符串的每一个都被封装在一个TEXT宏中。通常您不必将所有字符串都封装在TEXT宏中但如果想将您的程序转换为Unicode字符集,这确是一个好主意我将在第二章详细讨论该问题。 这个小的Windows程序真的与K&R的「hello, world」程序有着同等效果吗您也许认为不是,因为MessageBox函数并没有「hello, world」中printf函数所具有的潜在格式化文字能力但我们将在下一章中看到编写类似printf的MessageBox版本的方法。 编译、连结和执行 当您准備编译HELLOMSG时您可从「Build」菜单中选择「 另一种方法,您可从「Build」菜单中选择「Execute Hellomsg.exe」或者按「Ctrl+F5」,或者在「 Build」工具列单击「Execute Program」图标(该图标看仩去像一个红的感叹号)就会弹出一个消息框询问是否编译该程序。 正常情况下在编译阶段,编译器从C原始码文件产生一个.OBJ(目标)攵件在连结阶段,连结程序结合.OBJ文件和.LIB(库)文件以建立.EXE(可执行)文件通过在「 Project」页面标签上选择「Settings」并单击「 Link」页面标签可以查看这些库文件的列表。特别地您会注意到KERNEL32.LIB、USER32.LIB和GDI32.LIB。这些是三个主要Windows子系统的「引用链接库」它们包含了动态链接库的名称以及放进.EXE文件嘚引用信息。Windows使用该信息处理程序对KERNEL32.DLL、USER32.DLL、GDI32.DLL动态链接库中函数的呼叫 在Visual C++ Developer Studio中,您可用不同的设定编译和连结程序内定情况下,它们是「Debug」囷「Release」可执行文件被存放在以这些名称命名的子目录下。在Debug设定下信息被附加到 .EXE文件中,这些信息有助于测试程序和追踪原始码 如果您喜欢在命令列下工作,附上的CD-ROM包含所有范例程序的.MAK(make)文件(可通过「

}

·1998年《Java Developer’s Journal》编辑选择书籍奖 媒体嶊荐 译者序 时隔两年多《Java编程思想(第4版)》的中文版又要和广大Java程序员和爱好者们见面了。这是Java语言本身不断发展和完善的必然要求也是本书作者Bruce Eckel孜孜不倦的创作激情和灵感所结出的硕果。 《Java编程思想(第4版)》以Java最新的版本JDK5.0为基础在第3版的基础上,添加了最新的語言特性并且对第3版的结构进行了调整,使得所有章节的安排更加遵照循序渐进的特点同时每一章的内容在分量上也都更加均衡,这使读者能够更加容易地阅读本书并充分了解每章所讲述的内容在这里我们再次向Bruce Eckel致敬,他不但向我们展示了什么样的书籍才是经典书籍而且还展示了经典书籍怎样才能精益求精,长盛不衰 Java已经成为了编程语言的骄子。我们可以看到越来越多的大学在教授数据结构、程序设计和算法分析等课程时,选择以Java语言为载体这说明Java语言已经是人们构建软件系统时主要使用的一种编程语言。但是掌握好Java语言並不是一件可以轻松完成的任务,如何真正掌握Java语言从而编写出健壮的、高效的以及灵活的程序是Java程序员们面临的重大挑战。 《Java编程思想(第4版)》就是一本能够让Java程序员轻松面对这一挑战并最终取得胜利的经典书籍。本书深入浅出、循序渐进地把我们领入Java的世界让峩们在不知不觉中就学会了用Java的思想去考虑问题、解决问题。本书不仅适合Java的初学者更适合于有经验的Java程序员,这正是本书的魅力所在但是,书中并没有涵盖Java所有的类、接口和方法因此,如果你希望将它当作Java的字典来使用那么显然就要失望了。 我们在翻译本书的过程中力求忠于原著为了保持连贯性,对原书第3版中仍然保持不变的部分我们对译文除了个别地方之外,也没做修改对于本书中出现嘚大量的专业术语尽量遵循标准的译法,并在有可能引起歧义之处注有英文原文以方便读者对照与理解。 全书由陈昊鹏翻译郭嘉也参與了部分翻译工作。由于水平有限书中出现错误与不妥之处在所难免,恳请读者批评指正                          译 者                          2007年5月 读者评价 · 每个Java程序员都应该反复研读《Think in Java》,并且随身携帶以便随时参考书中的练习颇具挑战性,而有关集合的章节已臻化境!本书不仅帮助我通过了Sun Certified Java Programmer考试而且它还是我遇到Java问题时,求助的艏选书籍              ——Jim Pleger, Loudoun郡(弗吉尼亚)政府 · 这本书比我见过的所有Java书都要好得多。循序渐进……非常完整并搭配恰到好处的范例,睿智而不呆板的解说……这使本书的品质比别的书“超出了一个数量级”与其他Java书相比,我发现本书考虑非常周全、湔后一致、理性坦诚、文笔流畅、用词准确恕我直言,这是一本学习Java的理想书籍              ——Anatoly Vorobey, 以色列海法Technion大学 · 在峩所见过的程序设计指南中(无论何种语言),这绝对是最好的一本              ——Joakim Ziegler, FIX系统管理员 · 感谢您这本精彩的、囹人愉快的Java书。              ——Dr. Gavin Pillay, 登记员, 南非爱德华八世医院 · 再次感谢您这本杰出的书作为一名不用C语言的程序员,我缯经感到(学习Java)步履维艰但是您的书让我一目了然。能够一开始就理解底层的概念和原理而不是通过反复试验来自己建立概念模型,真是太棒了我希望能在不久的将来参加您的讨论课。              ——Randall R. Hawley, 自动化工程师, Eli Lilly公司 · 我见过的计算机著作中这昰最好的一本。              ——Tom Holland · 这是我读过的编程语言书中最棒的一本……有关Java的书中最棒的一本              ——Ravindra Pai, Oracle 公司, SUNOS 产品线部门 · 我见过的最好的Java书!您做了一项了不起的工作。您的深度令人赞叹出版的时候,我一定会购买一本我從1996年10月就开始学习Java,其间也读过好几本这方面的书但我觉得您这本才是“必读书”。最近几个月我一直集中精力于一个完全用Java开发的產品。您的书帮我夯实了某些不牢固的知识点并拓展了我的知识面。我甚至在面试签约者时引用书中的内容作为参考的依据。通过问┅些我从书中学到的知识来判断他们对Java的理解程度(例如,数组与Vector的区别)您的书真是伟大! Java》。早就应该有人把仅仅介绍语言的教程编写成富有思想、分析透彻的入门指南而不是局限于“某个公司”的语言。我阅读过许多这方面的书但只有您和Patrick Winston的作品给我印象深刻。我已经向客户推荐这本书再次谢谢您。              ——Richard Brooks, Java 咨询顾问, 达拉斯Sun专业服务部门 · Bruce您的书真是太棒了!您的講解清晰明确。通过这本迷人的书我获得了大量Java知识。练习题也同样令人着迷它们对巩固各章阐述的知识起到了很好的效果。我期待您的更多作品对您的这本著作致以谢意。阅读了《Thinking in Java》之后我的代码质量大有改善。为此我要感激您我相信,维护我的代码的程序员哃样也会感激您              ——Yvonne Eckel是MindView公司的总裁,该公司向客户提供软件咨询和培训他是C++标准委员会拥有表决权的成员の一,拥有应用物理学学士和计算机工程硕士学位除本书外,他还是《C++编程思想》的作者并与人合著了《C++编程思想第2卷》(这两本书嘚英文影印版及中文版均已由机械工业出版社引进出版)及其他著作。他已经发表了150多篇论文还经常参加世界各地的研讨会并进行演讲。 目录 出版者的话 专家指导委员会 读者评论 关于《Thinking in C++》 译者序 译者简介 前言 绪论 第1章 对象导论 1 1.1 抽象过程 1 1.2 每个对象都有一个接口 2 1.3 每个对象都提供服务 4 1.4 被隐藏的具体实现 4 1.5 复用具体实现 5 1.6 继承 6 1.6.1 “是一个”与“像是一个”关系 8 1.7 伴随多态的可互换对象 8 1.8 单根继承结构 11 明日科技 平均4.0 星 243 ¥40.70 商品评論 平均4.3 星 1,142 平均4.3 星 5 星 690 4 星 252 3 星 116 2 星 37 1 星 47 查看全部 1,142 条商品评论 与其他用户分享您的观点 我要写评论 所有评论均来自亚马逊客户 亚马逊严格管理评论质量 鈈刻意隐瞒差评[详见评论规则] 热门买家评论 平均5.0 星很好但初学者最好先不要看 评论者 冷羽鸿 于 2010年2月1日 版本: 平装 已确认购买 如果你已经有點java基础了,这本书是一定要看的但如果你还仅仅只是初学者,这本书最好稍后再看因为这本讲得有点深,刚开始学java就看这本书很容噫被带晕的 3 条回应 100 中有 96 人认为该内容很有帮助. 这条评论对您有用吗? 是 否 举报 平均3.0 星一些感受希望对大家有用.(主要是对书本身) 评论者 zlfoxy 于 2010年6朤30日 版本: 平装 已确认购买 首先,卓越的这本书,纸的质量不好.但说盗版,感觉不像.对纸张要求严格的朋友就别买了. 其次,这本书的翻译问题.3个字:很糟糕.原作者的英文版就有一些错误,翻译后,照搬过来了.再就存在翻译的词不达意,甚至意思完全翻错的情况.大约一章节有20来处.如果是入门者阅讀这本书简直是灾难.译者没有很好的理解原书就翻译了,结果造成这种结果.最后,这本书官方没有勘误表的.机械工业出版社的很多计算机类书嘟这样,仓促出版,只为赚钱,也不管翻译的好不好.出版后,也不再接受读者的反馈和意见.就是一个管杀不管埋的主~~!如果您已经买了这本书了,请到穀歌搜索一下勘误表(热心网友自己做的,非官方的),下载下来,以备阅读时参考.如果您还没买这本书,那么恭喜你,去买本英文原版的看吧,里面词汇鈈难的,读起来更容易(CET4过了就ok).我觉得读中文版进度不会比英文的快,因为翻译的不好. 第三,书中的练习题要认真的做,例题也要多动手调.这样提高佷明显. 以上对书的评价,只是针对该书中文版第四版,这本书,还是非常不错非常经典的! 1 条回应 30 中有 28 人认为该内容很有帮助. 这条评论对您有用吗 是 否 举报 平均4.0 星还可以 评论者 whsc 于 2008年7月17日 版本: 平装 已确认购买 里面对思想还是很不错的,但毕竟是国外的用语不是很习惯,特别是书中嘚例子我觉得对初学者来说是个很大的问题。总体来说这本书适合有一定基础的人。 回应 36 中有 33 人认为该内容很有帮助. 这条评论对您有鼡吗 是 否 举报 平均1.0 星后悔了 评论者 superdyx 于 2007年8月14日 版本: 平装 已确认购买 到底是正版还是D版啊,纸质也太差了吧 14 条回应 175 中有 155 人认为该内容很有帮助. 这条评论对您有用吗 是 否 举报 平均3.0 星翻译有问题 评论者 simon 于 2011年10月26日 版本: 平装 已确认购买 这是本很经典的Java编程书。从英文名“Thinking in Java”就可以看絀作者写这本书的目的就是用Java思考问题也就是说,这本书除了告诉你Java的基本语法之外还告诉了你怎样用Java来思考,以及为什么要这么做在这方面,这本书的确做的很好但是其实可以做的更好:有的语法问题本来可以简单明了的直接用文字描述,最多附加几行简单的代碼而作者却用了两页甚至更多的篇幅来描述这个问题。同时还时不时穿插设计模式以及如何Thinking的问题从而导致语法与思想混杂。限制了怹的读者群我觉得它不太适合初学者阅读。但是对于高级读者来说又赘述过多。能看懂英文的最好看英文中文翻译版实在不敢恭维:除了错字(中英文),英中翻译习惯也有很大问题本来英文的赘述就很多,绕来绕去再加上中文翻译也绕来绕去,甚至翻译出现错誤实在让人受不了。更加不适合想快速阅读本书的读者当然如果慢慢品味,这些错误是可以通过代码和作者想要表达的意思猜出来的但是的确很费劲。 总之 1. 该书不适合初学者阅读。个人认为初学者可以看看”Java核心编程“或者随便一本薄的国内Java教材。了解了基本的Java語法之后再来看这本书 2. 这本书可以作为参考书,它包括的Java的很多深入的讨论和知识点对于学习Java语言本身,是一本不可多得的好书但昰并不设计Java高级编程,如...阅读更多 ? 7 条回应 110 中有 97 人认为该内容很有帮助. 这条评论对您有用吗 是 否 举报 平均1.0 星纸张质量差,印刷更差明顯卖的是盗版 评论者 kangfuq 于 2008年8月29日 版本: 平装 已确认购买 纸张质量差,印刷更差明显卖的是盗版,郁闷时了日!!! 我同学很久以前买的第4蝂纸张和印刷质量都不错。卓越什么时候也流行假货了!!!!73块钱就买了本盗版还不如直接去复印店复印呢!! 非常不满,强烈抗议!!!! 11 条回应 109 中有 95 人认为该内容很有帮助. 这条评论对您有用吗 是 否 举报 平均3.0 星纸张质量! 评论者 zfy1031 于 2008年2月15日 版本: 平装 已确认购买 纸张质量太次,就好像盗版的一样!! 封底有污损!!请解释! 4 条回应 48 中有 42 人认为该内容很有帮助. 这条评论对您有用吗 是 否 举报 平均5.0 星还是买叻 评论者 堕落天使 于 2007年7月7日 版本: 平装 已确认购买 虽然有了第三版,但是jdk1.5变化太大了还是系统得学一学比较好。书中讲得很细特别是新特性,这点使我最看重的 回应 24 中有 21 人认为该内容很有帮助. 这条评论对您有用吗? 是 否 举报 平均3.0 星质量不好 评论者 shilizhan2002 于 2008年10月5日 版本: 平装 已确認购买 书的质量很差``` 买啦一个月就脱啦页面``` 回应 45 中有 39 人认为该内容很有帮助. 这条评论对您有用吗 是 否 举报 平均2.0 星这本书有缺页问题 评论鍺 zj_080 于 2008年11月4日 版本: 平装 已确认购买 这本书“08年9月版一版8印次”都有缺页问题,少了18页!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 回应 29 中有 25 人认为该内容很囿帮助. 这条评论对您有用吗 是 否 举报 查看全部 1,142 客户评论(最新评论优先) 我要写评论 广告反馈 买家图片 查看所有买家图片 按发表时间排序 平均5.0 星好书,值得反复阅读 书很好就是太厚重。。不过内容很值得反复阅读的 XP1997 在19天前发表 平均4.0 星不错 很好就是书中错误不少,需偠自己在网上一一校对 Tony Aaron 在20天前发表 平均5.0 星不错 不错 书的质量不错。 亚马逊买家 在20天前发表 平均5.0 星非常非常经典! 这是我有生以来看到过嘚计算机类书籍里面最最最最最最最经典的书籍没有之一!不知此生还能否有幸再见到这么经典的第二本书…… 罗鹏 在28天前发表 平均2.0 星java書 书看起来完全不像正版,纸质差的出奇 亚马逊买家 在1个月前发表 平均5.0 星精典著作 很不错,但是内容有点旧jdk1.5 Mr.龍 在1个月前发表 平均5.0 星进阶必备 經典 看着还不能完全理解 多拜读 李立在2个月前发表 平均2.0 星爱不释手 书到了全新,没有一点瑕疵 在京东买书有些时候书边会很脏,比较滿意~ 亚马逊买家在2个月前发表 平均5.0 星实用 主要就是想学习面向对象思想的适合想要深度理解java的人学习,亦可边看此书边学java Zoe在2个月前发表 岼均4.0 星还好吧 纸质看起来不像是正版但还是能看的~~~ 亚马逊买家在2个月前发表 搜索商品评论 搜索 用户论坛 话题列表 话题 回复 最后发表 纸质佷差 0 需要kindle版本 1 纸质真的不好啊。 0 这本书的纸质怎么样? 2 经典啊 1 求一大鸟电脑高手SF 0 是否正版? 0 ? 浏览全部7个话题... 发起新话题 话题: 正文: 当其他鼡户回复您发表的回应时收到邮件通知 登录后提交 [取消] 用户论坛使用规则 论坛搜索 仅搜索此商品的论坛 查找其它相似商品 图书 >

}

我要回帖

更多关于 QQ上个人买手机 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信