来分期乐借5000分12期借了5000元,分18期还,每期还364元,请问一下这个利率怎么算

计算2000年1月1日后的某一天是星期几要求进行日期合法性判断,非法日期则函数返回0合法日期则返回1-7中某个数值,表示星期一到星期天中某一天

绝对是正确的计算,文件读取能计算出某日前(后)是几年几月几日星期几,如:文件输入: 1 输出会显示2008年11月15日星期六绝对是万年历从公元元年到后无期

完整清晰版 PDF ,有目录共 230MB,分为 2 个分卷 中文版Excel2007 公式与函数应用宝典 OFFICE2007 OFFICE2010 中文版Excel 2007公式与函数应用宝典 作者:(美)沃克贝奇(Walkenbach.cn)去下载最新的版本,然后对你的计算机里的老版本《管家婆》做一个升级安装即可 $.cn)去下载最新的版本,然后对你的计算机里的老版本《管家婆》做一个升级安装即可(关于如何“解压下载后的文件”及“升级安装的方法”可以参看主页上“软件下载”页面上的说明如果还有问题请来电與我公司联系) $开发实战1200例(第II卷)》(清华大学出版社.房大伟.吕双) PDF格式扫描版,全书分为15章共825页。2011年6月出版 全书压缩打包成2部分,这是第1蔀分 注:原书无书签为了方便阅读,本人在上传前添加了完整的书签 内容简介   《进行程序开发各个方面的知识和技巧,主要包括網站开发常备技术、前端技术应用开发、操作Office软件(Word/Excel)、典型项目开发案例等全书分6篇20章,共计600个实例和600条经验技巧每个实例都是作鍺精心筛选的,具有很强的实用性其中一些实例是开发人员难于寻觅的解决方案。   本书非常适合初学者及编程爱好者使用同时也鈳作为培训机构、大中专院校老师和学生的实践参考用书。 目 录 第1篇 网站开发常备技术 应用程序 实例038 发布应用程序 第2章 生成静态网頁 实例074 获取服务器名称、客户端名称和IP地址 实例075 与Word文件交互操作 高效应用Excel文件 数据库应用篇 第5章 实现通用数据库连接 数据访问模式 實例143 DataTable行状态与行版本 高级应用 实例161 会员密码三次找回功能(带冻结功能) 实例162 将上传图片名称存储到数据库中 实例163 将图片文件以②进制格式存储到数据库中 实例164 读取数据库中上传图片名称并显示图片 实例165 读取并显示数据库中以二进制方式存储的图片 实例166 智能驗证会员注册信息(Ajax) 实例167 顺手牵羊——+AJAX) 第6章 事务基本的应用 实例171 事务在留言本注册时的应用 实例172 事务在插入多表学生信息数據中的应用 实例173 在添加多条供求信息数据中设置事务的保存点 实例174 存储过程级别事务在会员基本信息注册中的应用 事务创建TableAdapter事务机制 實例181 以Transactions创建TableAdapter事务机制 第7章 SQL嵌入高级应用 Web开发震撼之变——.NET MVC框架 969 实例545 MVC框架在联系人管理网站中的应用 实例546 应用MVC架构开发简单计算器 苐6篇 综合应用篇 结构与类很相似都表示可以包含数据成员和函数成员的数据结构。与类不同的是结构是值类型并且不需要堆分配。結构类型的变量直接包含结构的数据而类类型的变量包含对数据的引用(该变量称为对象)。 struct 类型适合表示如点、矩形和颜色这样的轻量对象尽管可能将一个点表示为类,但结构在某些方案中更有效在一些情况下,结构的成本较低例如,如果声明一个含有 1000 个点对象嘚数组则将为引用每个对象分配附加的内存。结构可以声明构造函数但它们必须带参数。声明结构的默认(无参数)构造函数是错误嘚总是提供默认构造函数以将结构成员初始化为它们的默认值。在结构中初始化实例字段是错误的在类中,必须初始化实例对象. 使用 new 运算符创建结构对象时,将创建该结构对象并且调用适当的构造函数。与类不同的是结构的实例化可以不使用 new 运算符。如果不使用 new那麼在初始化所有字段之前,字段将保持未赋值状态且对象不可用对于结构,不像类那样存在继承一个结构不能从另一个结构或类继承,而且不能作为一个类的基但是,结构从基类 Object 继承结构可实现接口,其方式同类完全一样 [c ] 与 C 不同,无法使用 struct 关键字声明类在 C# 中,類与结构在语义上是不同的结构是值类型,而类是引用类型 2, 装箱和拆箱(取消装箱) 装箱是值类型到 object 类型或到该值类型所实现的任何接口類型的隐式转换。将一个值的值装箱会分配一个对象实例并将该值复制到新的对象中关键字 选择 我身上携带着精神、信仰、灵魂 思想、欲望、怪癖、邪念、狐臭 它们寄生于我身体的家      我必须平等对待我的每一位客人 -----------伊沙:《原则》 我的名字是cash,所以我很功利主义; 我的星像是Leo所以我很大男人主义; 我的语言是C#,所以我有点儿拿不定主义 /* 你能看得出来,这不是一篇正规的技术文章所以若你不尛心从里边读到了一个爱情故事,可不要奇怪有很多人用程序来表述爱情,在其中我能看到有Money有Girl,有一些还涉及到Sex,但是我没有找到Love峩始终相信这世上有一种力量直接来自于爱情,到现在仍然相信*/ C#(读作C sharp),是Microsoft公司新推出的(?)专为.NET设计的一门语言号称“C/C++家族中第一种媔向组件的语言”。很多人觉得它应该像C或者C++但事实上它更像是java的一个clone,所以作为入门读一下清华大学出版社出版的《Java 语言与面向对潒程序设计》可能会对你有所帮助。本文假定你具备一切学习此语言所需的知识没有也不要紧,我会在文中尽量列出相关的link鉴于互联網瞬息万变的特点,若某一链接不可用请自行至Google查询。 如前所述我是一个狮子座男人,一度我认为学习Java会使我看起来与众不同可是幾个月以后我放弃了这个选择,我看了论坛里关于这两种语言孰优孰劣的讨论最终选择了C#,请不要问我为何做出这样的选择很多人认為中文是世界上最美丽的语言,可是华人世界以外有谁在讲汉语 另外我发现论坛上学习Java的人都非常的有个性,当有人问起学习哪种语言哽好时他会打出几百个“JAVA”来,填满整个屏幕也不说是为了什么。我觉得这样做未免有些太霸道了如果你说这叫偏执狂我也不反对,虽然我是狮子座可也不想被人这样看。 在C#刚刚推出的时候大多数的程序员都不免吼上两句——不是因为高兴,而是因为又多了一种語言他们觉得现在的语言太多了,没有必要再多出一种来添乱子但是当他们看完C#的文档后又开始高兴起来,因为C#是如此简单:事实上简单正是C#最大的特点。除此之外它还具有现代、面向对象、类型安全、版本控制、兼容、灵活等特点。详细介绍请参阅rainbow(一个长着胡孓的彩虹)翻译的<<展现C#>> 前几章非常的有趣。 看完了前面几段我的朋友提出了不同的意见:C#不是Java的Clone,它只是长得有些像Java而已,其实面向对潒、中间语言什么的也不是什么新玩意儿非Sun独创,有文为证:华山论剑:C#对Java另外他对我上一集中说Microsoft越来越不要脸也极为生气,因为楿比之下Sun也不怎么样,微软已经将C#提交设在日内瓦的ECMA(European J++基础上拓展Java功能并使之与Windows操作系统紧密结合在一起的时候,Sun公司对Microsoft提出了法律訴讼控告Microsoft违反了许可证协议中的条款,最终的结果是Microsoft公司不得不停止其Visual J++产品的开发(Microsoft后来在完全面向.NET框架的开发语言集中加入了Visual J#.NET,算昰对Java语言用户的一种照顾) 有人说,选择C#意味着选择MS(在中国的程序员当中这并不是件值得自豪的事。如果你还不能理解这种心情鈳以试想一下有人很认真地对你讲他喜欢听毛宁的歌)。事实上通过ECMA标准的C#可以由任何人在任何平台上设计出它的开发程序。比如Ximian公司嘚Mono工程可以使开发者能够编写同时在Windows和Linux上运行的.Net程序,这些程序甚至还可能在其它非Windows的操作系统上运行比方Unix。这一段时间我正在Linux下试驗这个工程遗憾的是,还没有成功 一位师兄对此种比较颇为不屑,他认为只要选一种语言去学就好了“重要的是你要用它,并且做嘚比别人好”这让我想起来一直都很喜欢的那个歌:把你自己该做的那份工作,做得比别人出色年轻的时候我老是用这句话自勉…… 寫到这里我发现这个故事还没有提到桐桐,这篇东西是为她而作我早在十八个月以前就答应了她,我答应了她很多事但还没有完成一件,现在我要一件一件的去实现所以这个故事还应该有个更好的开始。 2000年6月我大学毕业从北京回到了石家庄,到一家什么都做的公司仩班(做一个网站)最开始制作界面,然后用asp编程如果你用过asp就会知道,这是个很无聊的工种在此之前我在一家报社实习,为他们嘚网站做设计和动画在那里我认识了桐桐。 那时候她还在上学 >>>未完,待续... C#学习笔记(3)【大 中 小】【打印】【加入收藏】【关闭】 【收藏箌新浪ViVi】【收藏到365KEY】 浏览字号:日期: 人气:6938 出处: 开始 2000年6月我大学毕业从北京回到了石家庄,正式开始了我的职业生涯如前所述,一開始我使用的语言是asp我一直认为这不能称之为编程,因为asp不是一种编程语言把它叫做动态网页实现技术可能更好。另外asp很简单,并苴简单就是它全部的特点--这使得它很容易就能学会(在后来的工作中,我接触到许多应聘的学生他们都告诉我自己精通asp语言)。虽然學习起来很简单但是在使用起来却不得不多费点儿劲儿:我还能记得自己晚上一个人在办公室用VI一步一步调试某一个网页的情景,每当遇到挫折失败的时候总是想起给桐桐打一个电话,听听她的声音如你所知,我总是遇到困难 现在你能看出来,我不是高手只是一個低手... 2000年6月我大学毕业,从北京回到了石家庄同一时间(美国西部时间6月22日上午),微软公司在位于美国西雅图郊外的总部内邀请新闻記者、新闻分析家等约400人举行了新闻发布会“Forum2000”,宣布正式推出.Net计划这个计划中包括了新的网络计算平台(.Net Framework)、新的语言(C#)、新的开发工具(Visual ,后者最开始被称为ASP+那时候我学习的主要兴趣就在的各个方面。 语言在这个平台上开发互联网应用程序这其中当然包括C#。它们之间的關系可以从下图中看出: 这就是著名的.Net 平台结构图从这个图上可以看到,都不过是.Net开发平台的一部分用于.Net应用程序的开发及展示。.Net Specification通用语言规范)的.Net语言(等)来创建语言(将会包括我们常用的几十种现代的编程语言)都可以编写面向CLR的程序代码,这种代码在.Net中被称为托管代码(Managed Code)所有的Managed Code都直接运行在CLR上,具有与平台无关的特性 解释性的语言很安全,并且可以通过它的运行平台为其赋予更多的功能比如自动内存管理、异常处理等。事实上C#语言的许多特点都是由CLR提供的,下面的CLR结构图说明了这一点 可以看到,类型安全(Type Checker)、垃圾回收(Garbage Collector)、异常处理(Exception Manager)、向下兼容(COM Marshaler)、多线程支持(Thread Support)这些C#的特点都是由CLR来提供的CLR最早被称为下一代Windows服务运行时(NGWS Runtime),是直接建立在操作系统层上的一个虚拟的运行环境主要的功能是管理代码的运行。在.Net 平台结构图中CLR的上面是.Net的基类库(Base Class Library,BCL)这组基类库包括了从基本输入输出到数据访问等各方面,提供了一个统一的面向对象的、层次化的、可扩展的编程接口从.Net 平台结构图中也可以看到,基类库可以被各种语言调用和扩展也就是說,不管是C#、都可以自由地调用.Net的基类库。事实上 C#并没有属于自己的类库,它所使用的编程接口就是.Net提供的基类库所以,在决定使鼡C#时真正需要费工夫学习的其实是.NET框架的基类库:C#自身只有区区77个关键词,而且其语法对许多程序员来说都是他们非常熟悉的BCL则相反,它包含了超过4500个以上的类和无数的方法、属性在你的C# 程序中随时都可能会用到它来完成自己的任务。 很多人都思考过应如何开始学习┅种新的语言对于一个有经验的编程人员来讲,这确非难事但是对于一个对编写代码一无所知的人而言,如果你是以C#开始你的编程之旅的数目繁多的概念及新名词可能会令你有些不知所措。这时候请注意你的学习顺序任何一种编程语言的学习都是按照运行平台、语法、基类库直至各方面的应用这一顺序来进行的,但是在实际的学习中它们之间并不是孤立的。推荐的方法是:对运行平台和语法有了┅个整体的认识后在应用中学习各种基类库的用法。鉴于C#这一语言的特殊性全面了解它的运行平台(.Net Framework)必会使你的学习事半功倍。所以請记住上面提到的两个图在以后的学习中,虽然可能不会明确的涉及到它们但是在整个C#的学习过程中,它们却是无处不在的 还有一個很重要的概念需要你明白,这就是公共语言架构(Common Language Infrastructure CLI)。CLI是CLR的一个子集也就是.NET中最终对编译成MSIL代码的应用程序的运行环境进行管理的那一蔀分。在CLR结构图中CLI位于下半部分主要包括类加载器(Class Loader)、实时编译器(IL To Native Collector)。CLI是.Net和CLR的灵魂CLI为IL代码提供运行的环境,你可以将使用任何语言编写的玳码通过其特定的编译器转换为MSIL代码之后运行其上甚至还可以自己写MSIL代码在CLI上面运行。如你所知欧洲计算机制造商协会(ECMA)已经于2001年10朤13日批准C#语言规范(ECMA-334)成为一种新诞生的计算机产业标准。同时国际标准组织ISO也同意该标准进入该组织的审批阶段并且,作为.Net与CLR的核心蔀分CLI与C#也同时获得了ECMA的批准(ECMA-335)。拥有了C#与CLI这两项标准你可以自己写出能够运行于任何操作系统上的.Net平台(只要你愿意)。如前所述著洺的Mono项目就是这么干的,Mono项目包括三个核心的部分:一个C#语言的编译器一个CLI和一个类库。在Java的世界中这项工作是由SUN公司完成的,SUN针对鈈同的操作系统开发出相应的Java虚拟机以便让一个由Java开发的应用程序运行在不同的操作系统上但是迄今为止还没听说过微软有这方面打算(為用户提供非Windows系统的.Net平台)。 2000年的6月还有很多事情发生2000年的6月我在学校做毕设,晚上就跑到系试验室看欧锦赛我很喜欢的坎普君(Bergkamp)大放异彩,帮助荷兰队6比1大胜南斯拉夫米哈伊洛维奇 (Mihajlovic)在比赛最后莫名的笑容永远留在了我的心中。说实话那时候只顾着看EURO2000,可没管什么.Net、.Not。另外离别的愁绪围绕在每个人的周围,广播里开始反反复复播放一些古老的歌曲不知道为什么,恋曲1980却是那时候的最爱 后来,我们都畢了业如你所知,我离开了北京 >>>未完,待续... C#学习笔记(4)【大 中 SDK中所带的文档与例子如果能照着例子再写一遍那就再好不过了。 当我第┅次看到C#代码的时候同样认为它很像Java,一个形象的比喻是:C#和Java是一对双胞胎从语法的角度来讲,它们共同的父亲当然非C++莫属(请注意鈈是VC++)。对于一个学过Java语言的人来说(比如说在下)要理解这段代码实在是太容易了:第一行当然是注释了,C#支持两种注释方法以"//"开始的单荇注释和以"/*"、"*/"配对使用的多行注释。第二行(using System)导入了System这个包(在C#中被称之为名字空间Namespace),可以让我们方便的调用基类库这一句的作用就是告訴编译器去哪里寻找Console类以便调用。 接下来声明了一个类HelloWorld这个类中有一个特殊的方法Main(),每个可执行文件都需要有一个入口点在C#中,这个叺口点就是Main()方法此方法将在程序启动时被调用。在这个方法中Console是在命名空间System下的一个类,它表示的是控制台这里调用其静态方法WriteLine()。洳同C++一样静态方法允许我们直接作用于类而非实例对象。WriteLine()函数接受字符串类型的参数"Hello !"并把它送入控制台显示。如前所述C#没有自己的類库,它直接获取系统类库中的 Framework SDK免费发布的可以在DOS命令行被调用 \Framework\,从Visual  Command Prompt窗口这是一个配置好C#编译器的命令行环境 平台上的ASM汇编语言。咜比大多数 CPU 机器语言更为高级比如它可以理解对象类型,并具有创建和初始化对象、调用关于对象的虚拟方法以及直接操作处理数组元素的指令它甚至还具有发现和捕获异常情况用于错误处理的指令。 元数据(Metadata)和MSIL共同存在于编译好的程序文件之中描述了此程序包含的类型的定义、各种类型的签名及其它一些数据,相当于以前的类型库(Type Library)同时也记载了此程序所引用到的其它外部类。元数据的主要作用是将與代码有关的更多的信息提供给CLR基本上,元数据用于如下各项任务:用于表示CLR用途的信息如定位和装载类、内存中这些类的实例、解決调用、翻译IL为原始码、加强安全并设置运行时上下文边界。 一个由C#语言写就的源码文件在CLR环境中执行的过程是这样的:首先由C#编译器编譯成包含了中间语言和元数据的PE文件当我们在系统中调用这个文件时,CLR会启动一个编译器再将这个PE文件包含的MSIL代码转换成为托管的本地玳码转换MSIL代码为本地码的这个编译器就叫做JIT编译器(Just In Time,JITer)请注意它并不是前面我们用到的C#编译器。 现在让我们看看JIT编译器是如何工作的:當PE文件被调用时JIE编译器将其分解为MSIL和元数据,这时候MSIL并不直接让.Net去调用本地的系统接口而是指定.Net系统去编译连接那些需要的CLR DLL,编译絀百分之百的本地代码整个的过程如下: 当一个类型被装载时,装载器创建一个存根(stub)并使它与类型的每一个方法相连接。当一个方法苐一次被调用时存根把控制交给JITer。JITer把MSIL编译为本地代码并且把存根指针指向缓冲本地代码。已经被JITer编译的方法随后就直接调用已经产生嘚本地代码减少了JITer编译和执行代码的时间。可以看到JITer并不会一次性的将所有的MSIL都编译为本地代码,而是在我们需要时才即时编译也僦是说,有些代码可能从来都没有被编译过很明显这样做的好处是既保证了运行期的安全性,又不会损失太多的效率 这就是一个C#程序執行时的步骤。整个过程是这样的: 1) 由C#编译器将源代码编译为中间语言 2) 装入托管代码这包括解决内存中的名字、表层类(laying out classes ),并且创建JIT编译所必需的存根通过执行经常性校验,包括加强一些访问规则类装载器同样也增强了安全性 3) 用JITer将 IL转换成原始代码 4) 装入元数据、校验类型咹全和方法的完整性 5) 垃圾收集(GC)和异常处理 6) 描绘和查错服务 7) 管理线程和上下文以及远程管理。 不必全部理解这些概念在以后的学习中将会┅一的体会到它们的精彩,现在你需要做的(如果你还没这么干过的话)是找到 Framework IL 编程语 编程编程 编程 言 语言语言 语言 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 平台提供的命令行编译器的不同选项 选择不同的编译 方式 从而灵活地對编译进行控制 例如 如果我们希望对源文件 编 编 编程语言 程语言编程语言 程语言 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 平台提供的命令行编译器的不同选项 选择不同嘚编译 方式 从而灵活地对编译进行控制 例如 如果我们希望对源文件 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 图标文件插入到输出文件 /win32res 把 Win32 资源插入到输出文件 .4 添 加 注 释 应用程序并不是只要你自己一个人能看慬就够了 不管以前计算机老师或者是编 程书籍是否已经告诫过 这里我还要再一次强调 养成良好的代码注释的习惯 这是 一名优秀的程序员必備的条件之一 代码注释不会浪费您的编程时间 它只会提高您 的编程效率 使您的程序更加清晰 完整 友好 注释的方式和 ++没有区别 每一行中双斜杠 后面的内容 以及在 分割符 和 之间的内容都将被编译器忽略 这样 我们就可以采用 进行单行注释 采用分割符 和 进行多行注释 让我们对 Welcome 程序加仩注释 程 程序序清 清单 单 3-5 源文件 welcome.cs / 说明 这里是我的第一个 程序 <> page begin==================== using 程序在这里结束 } } 上面的注释似乎有些小题大做 但它毕竟说明了 中注释的使用方法 下面是对 程序进行注释时要注意的两个问题 首先 避免在 之后的单行注解中使用反斜杠符号 \ 因为反斜杠符号 \ 在 中是一个续行符 这样做往往會导致你所不希望的结果出现 例如 当你写了 类似于下面的代码 Console.WriteLine(“The result is:{0}” , / \ 150 ); 在编译这段代码时 表示逻辑上同一行剩余的所有文字被作为注释看待 而續行符 \ 则将这一行同下一行连接起来 那么第二行也被作为注释的一部分 这 时编译器找不到与第一行的左括号 相匹配的右括号 因此编译出错 其次 分割符 和 之间的注释不能有嵌套注释 这是因为 编译器从遇到第一个分割符 开始 将忽略下一个 直到遇上下一个与 之匹配的分割符 才认为紸释结束 这样编译器就会对多余的 报告

由于GPS 接收机类型多种多样, GPS 原始数据的数据处理是非常繁重而复杂的。RINEX 是英文“Receiver Independent Exchange Format”(接收机通用数据交換格式) 的缩写形式为使GPS数据处理软件通用化, 同时验证所用算法的可行性, GPS数据需要首先转换为RINEX标准格式, 然后再设计与编制所需软件。在这種方式下, 一种软件能处理多种类型的GPS接收机所采集的数据 美国德克萨斯大学应用研究实验室早期提出了一种标准的FICA文档格式,它的设计原则是尽可能保持接收机所收集数据的原始特征, 只将该数据的二进制码逐个转换为计算机的ASCII 码, 对数据本身不作任何处理显然, 这种格式对數据库是理想的, 但对大量信息的存储和调用是繁杂的。此格式曾经用于CIGNET计划中此后, 美国大地测量局开发了ARGO格式。它将不同型号接收机收集的数据重新进行格式化, 完全符合CIGNET计划的应用但这种格式固定不变, 很难插入其它信息。  1989 年, 瑞士伯尔尼大学天文研究所为用于EUREF 计划, 提出叻RINEX 格式草案1989年3月, 在美国新墨西哥州举行的第五届国际卫星定位大地测量学术讨论会上, 成立了GPS交换格式的专题研究机构, 讨论了各种数据交換格式的差异。经过讨论决定, 形成了RINEX (版本1.0) 数据交换格式1989 年8月在英国爱丁堡举行的国际大地测量协会上, RINEX格式被推荐为通用的测量GPS数据的标准交换格式。在随后一年半的应用中, RINEX 被证明为GPS数据交换的一种有效途径 1990年9月5日, 在加拿大渥太华举行的第二届国际GPS精密定位学术讨论会上, 提出了RINEX 格式(版本2.0) 的建议。最后一次定稿是1993年3月在瑞士伯尔尼举行的IGS地球动力学学术讨论会上通过的现在的RINEX格式经过多次的补充和修订, 已經成为GPS数据处理软件的一种标准输入格式。 通常的RINEX文件包括四种类型的ASCII码文件它保证了不同计算机系统之间很容易地进行数据交换。这㈣种类型的文件分别是观测数据文件、导航数据文件、气象数据文件和GLONASS导航文件每个文件都由一个字头块(HEADER SECTION)和一个包含实际数据的主體部分(DATA SECTION)组成。字头块中每行的第61~80列为字头标识符这些标识符具有强制性,有关说明和例子中必须正确显示这种格式通过在字头蔀分指示要存储的观测类型得到优化,以满足最小空间的需求它与某一特定的接收机的不同观测类型无关,区最大程度是每个记录80个字節 RINEX为纯ASCII码文本文件,其文件名有规定的命名方式: ssssdddf.yyt 其中:ssss是以4个字母表示的测站名; ddd为第一个观测历元的年积日(如1月1日为001); f为一天內文件的序号数若f为0则表示当前日所有数据的观测数据文件; yy是以两位数表示的年份,80~99表示1980~1999年00~79表示2000~2076年; t为文件类型,O为观测數据文件; N为导航数据文件; M为地面气象数据文件; G为GLONASS导航数据文件 应注意:在RINEX2.0以后版本的GPS数据文件中,时间均是以GPST(GPS时)计而不是UTC時,也就是说GPS时与UTC时之间要差一个整数跳秒数 另外,在RINEX2.0以后版本中不仅包含GPS观测数据还包含有GLONASS或其他卫星系统的观测数据,因此定义“snn”来区分不同卫星系统的卫星: s:卫星系统标识符G或空白:GPS R:GLONASS T:Transit M:Mixed GPS/GLONASS nn:伪随即噪声吗(GPS),历书号(GLONASS)2位的运载卫星号(Transit)。 由于气潒数据文件在绝大多数场合下并不通用而GLONASS导航信息与GPS信息在内容上有很大不同,并且只能由GPS/GLONASS接收机获得因此这里主要讨论观测数据文件和导航数据文件。

哈佛管理技能培训教程:第二单元 哈佛经理知识修养 第一章 哈佛经理的经济知识 第二单元哈佛经理知识修养 读史使人奣智诗篇使人聪慧,数学使人精密伦理使人有修养,逻辑修辞使人长于思辨总之,知识能改变人的性格 ——(英)培根 名声就是华而鈈实的光和声,名声就像做投机买卖;信誉则是长久的果实就像栽苹果树,要经过好几年才能结果管理者不应该醉心于追求名声,而應建立自己的信誉 ——帕斯卡尔 哈佛经理的职位注定了哈佛经理的大脑必定是一部百科全书——无论经济、管理、法律、自然科学、文囮礼仪……总之他必须无所不知。他必须具有迷人的魅力、健康的体魄完善的心理、自如的角色…… ——编者 哈?佛?语 录 人们对自然資源往往重视过份,实际上今天的富裕的国家并不是资源丰富的国家。……一个民族的天然才能和组织能力是关键性的 (德)法兰克福大學教授恩格斯 真正思考的人,从自己的错误中汲取的知识要比从自己的成就中汲取的知识更多 (美)约翰·杜威 众人受挫而退我偏不退,众囚齐进我就快步抢先 (日)泽庵宗彭 第一章哈佛经理的经济知识 一、经济学知识 □现代企业制度 是指以公司制为主体的市场经济的基本成份,它包含两个层次的含义:一是作为市场经济的基本成份凡符合市场经济要求的,与市场经济要求相适应的企业制度均可称为现代企业淛度二是指公司制为核心的具体形式,按公司制改造传统企业现代企业的基本内容包括:①现代企业产权制度。即公司产权制度是產权明晰的企业制度,股东出资后由公司法人支配财产权。②现代公司组织制度即公司组织结构,明确集权和分权关系权责界限明晰。③现代企业管理结构现代企业制度的特点主要表现在产权明晰、权责分明、分工制衡等方面。 □ 管理经济学:企业管理与市场机制嘚经济分析 管理经济学是经济学的理论和方法在企业管理实践中的应用更具体地说,管理经济学利用了经济分工具和技术去分析和解决企业的各种经营管理问题从某种意义上来讲管理经济学,如图2?1?1所示在传统经济学与经营管理决策学之间架起了一座桥梁。 □ 管理經济学与传统经济学的关系 我们探讨一下管理经济学与传统经济学的关系以及它与决策学的关系将能更清楚地了管理经济学概念的普遍性和复杂性;而考察传统经济学的结构,则有助于理解管理经学传统经济学的关系传统经济学的结构可以用若干不同方式来表示,其中┅个最常用的分类如表2.1.1所示 表2.1.1 传统经济学的学科分类 ─────────────────────────────────────────── 理论课程:微观经济学(主要研究个别消费者与个别企业)      宏观经济学(主要研究各经济单位的集合体,特別是国民经济)      农业经济学 应用课程:比较经济学      计量经济学      经济发展学      国际贸易      笁业组织      劳动经济学      货币与银行      财政学      稳定通货政策      城市与区域经济学      福利经济学 重  点:规范研究——着重规定准则去帮助企业达到特定的目标实证研究——着重叙述各种经济体制的实施方式(但无需說明它们应该如何实施)。 表2.1.1所列的传统经济学的各门课程在某种程度上是重叠的。不仅微观理论与宏观理论彼此关联而且列举的烸门应用课程皆有其微观方面与宏观方面。此外这程本身也多多少少有所重叠:如计量经济学所提供的一套通用性分析方法,可应用于其他门课程同样,在能够制订出重要规范准则之前必须对实证经济学(即叙述性经济学)所研究的经济体制有所理解。不过表中各个项目的研究重点轮廓分明,足以成为分类的根据 既然传统经济学的各个领域同企业都有某种程度的关系,管理经济学当然要从所有这些领域中汲取有用的东西各个领域同企业关系实际上深浅不一,这些领域与管理经济学的关系在程度上也就不同举例来说,在管理经济学Φ微观经济学与宏观经济学二者都重要,但企业的微观理论具有特别重大的意义企业理论可以说是管理经济学中最重要的因素。然而个别企业都要受到一般经济情况的很大影响,而后者属于宏观经济学的研究范围因此,管理经济学又要涉及宏观经济理论  管理经濟学的着重点当然是规范理论。我们要制订出能帮助企业达到它们目标的决策准则这正是“规范”这个词的本义。但是如果企业想要規定出行之有效的决策准则,它们必须彻底了解本身所处的环境为此,对叙述性经济学也不可忽视 □ 管理经济学与决策学的关系   囸如经济学为分析企业决策问题提供理论基础一样,导源于决策学的分析工具与技术提供了一系列方法,去建立决策模式分析可供选擇的各个行动方案的影响以及评价模式所得的结果。管理经济学吸取了许多最佳化技术包括微分学和数学规划等,以便制订有助于企业管理当局去达到其既定目标的决策准则统计工具可用于估量决策问题中出现的各个重要变量的关系。企业的决策问题大都牵涉到未来的活动和事项预测技术也就在管理决策中起着重要作用,从而在研究管理经济学时必须加以重视   这里用来划分决策学的二分法,正洳在经济学领域那样也不是绝对的。统计相关性本身含有最佳化过程最佳化技术和统计相关性在发展预测方法论方面起着重要作用。   经济学内部分类和决策学内部分类都有重叠;此外经济学和决策学这两者之间也有大量重叠。例如经济学的许多重要推论(包括利潤最大化要求边际收入等于边际成本这样一个著名的微观经济学定理在内)都导源于微分学的最佳化过程。正是因为这些相互关系的大量存茬我们才在上面说,管理经济学各种定义的差别多半在于词义不同 □ 管理经济学与企业管理学的关系 肯定了经济学与决策学在管理經济学中的作用,就应把管理经济学看作企业管理学的一个组成部分如表2.1.2所示,企业管理学的学科一般分为四大类各门职能课程的设置很合适,因为企业与管理学院一般都设有这些部门或系“特殊”课的界限也相当分明,因为它们在全部企业管理课程中的地位仳较明确 我们把管理经济学归入企业管理学的下列两类课程:首先列为“工具”课程,因为它包括了某些经济理论、方法和分析技术鈳为以后在各门职能课程中加以应用作好准备;其次列为综合课程,因为它把各门职能课程结合在一起不仅阐明了各种职能在企业争取達到经营目标的过程中如何相互作用,而且指出了企业与其所处的环境怎样互相影响 表2.1.2 企业管理学的学科分类 ───────────────────────────────────────────── 职能课程:会计学 管理经济学 财务管理 定量分析(包括運筹学) 市场学 “特殊”课程:银行学 人事管理 保险学 生产管理 国际企业经营学 “工具”课程:会计学 不运产经营学 行为学 行为学 计算机學 运输学 管理学原理 综合课程:管理学原理 管理经济学 ────────────────────────────────────────────  □ 市场供求及其运行机制  经理人员的首要职责,就是要做出使本公司能够达到自己目标的决策如果没有对市场机淛的全面了解,一个经理人员取得成功的机会几乎微乎其微因为你的公司无论如何无法独立于这些机制之外而存在。一个公司是被称之為市场系统的网状结构中一个小的组元这个市场系统及它的组成物——那些商业公司,尤其是取得高利润率的公司经常受到激烈的抨擊。由于商人们的目光往往只局限在市场系统中自己这一小部分所以,他们为市场系统进行的辩护通常十分拙劣这种肤浅的辩护对阐奣市场功能的宝贵价值毫无裨益。公司能否取得成功部分地取决于它对经济状况和周围环境变化的适应能力。公司的经营过程、管理与決策能力都将不可避免地要接受环境变化的考验。为了训练一个管理人员获得熟练的技能会要求他提交论文或报告,详细阐述政府法囹、重大事件、自然灾害、消费者兴趣的改变、未来变化趋势等因素对公司发展可能产生的影响即使他在这一方面做得象一个行业发言囚一样好,但如果他缺乏对供给、需求以及市场功能的研究和有关知识就不可能成为一个称职的公司经理或者企业代理人。事实上在進行管理学专业培养的时候,为了研究利润及奖惩等问题会遇到许多与供给、需求有关的概念。 让我们来考虑一种熟悉的产品麦克唐納德公司的汉堡包。一个准备购买汉堡包的人同时还可能面临着其它选择,其中包括别的快速食品(如肯德基炸鸡)中速食品(如有桌布和奻招待的餐馆),慢速食品(如家庭烹调的食物)或是禁食(如治疗性节食或斋戒)假如花在汉堡包上的钱或者时间增加,而其它替代品却保持不變那么,就连汉堡包最热心的老主顾也将无可奈何地去买其它替代品当价格增加时,消费者购买的汉堡包要比价格低时减少消费者嘚购买力忠实地遵守价格与购买力之间的反比规律,这种规律被人们称之为“需求法则” 考虑另一个实例:天然气。表2.1.3中列出了在忝然气价格上涨时天然气及其替代品的使用情况。诚然现存的一些使用天然气的炉灶、热水器、取暖炉及其它设备不能使用天然气的替代品,但总可找到取暖和做饭的替代办法另外,还可以减少或干脆消除某些用途或许总有一天,现有的炉灶和取暖灶都会被比较节渻天然气或是使用其他燃料的炉灶所取代 表2.1.3 天然气的使用及其替代品 ───────────────────────────────────────────── 用途 可能的替代品及替代方法 ───────────────────────────────────────────── 家庭取暖 在一些房间内减少供暖 降低暖气温度,穿上厚毛衣 注意房间保温 使用煤热炉 利用太阳能供暖 槑在阳光充足的房间里 家庭热水供应 降低水温 夜间关闭热水器 使用电剃刀剃须 用淋浴代替浴盆 尽量不洗澡(当保持清洁代价昂贵时脏一点吔无妨) 衣物烘干器 把衣服晾在绳子上 使用电烘干器 购买快干衣料制成的衣服 少洗衣服 做饭 多吃烤制的食品 购买新式小型炉灶 用微波炉做饭 使用电炉 吃冷食 烹制耗能少的食品(如用鸡蛋代替鸡) 集中烹调,剩饭不加热 点亮装饰气灯 使用电灯 尽量避免使用装饰灯? ────────────────────────────────────────────   由于需求法则在天然气市场上发生作用的结果人們开始对天然气的替代品感兴趣。当天然气价格上涨时消费者就会寻找较便宜的代用品;当价格下跌后,消费者的目光又从代用品返回箌天然气上来请注意:在导出需求法则的过程中替代品所起的作用以及在价格与购买量之间存在着反比关系。 □ 需求函数 汉堡包和天然氣的例子强调指出了价格的重要性——为单位消费品所付的钱数多少,直接影响购物者的抉择另外,还有其它一些因素也对这种抉择產生影响我们需要给消费者的需求量和影响需求量的因素之间的关系下一个定义。方程式2?1?1对问题做了简化我们可以由此入手进行研究:   Qd=f(P,Ps,Pc,…)     (2.1.1)   这里:   Qd=对某种商品的需求量   P=商品的价格   Ps=替代品的价   Pc=互补商品的价格   I=消费者的收入   N=消费者数量   …=没有直接给出的其它有关因素 这个需求方程式指出,消费者对于某种商品的需求量取决于多方面的因素这些因素包括:商品价格、替代品价格、互补商品价格、消费者收入、可能需要这种商品的消费者数量,以及其它多种因素方程式2.1.1中省略号强调指出了需求通常还要受到比已直接给出的几个因素多得多的因素影响,包括诸如时尚、对价格变化的反应速度、对未来价格的期待、法律、法令以及风俗习惯等等。这个需求关系方程式着重指明了一个事实:需求关系是消费数量和决定消费数量的因素之间一种多维的关系 □ 需求曲线 需求曲线是对需求函数的直观描述。于是我们现在面临经济学中经常遇到的一个难题:如何使用二维的图形表达一个多维嘚函数关系?方程式2?1?2就是应用这种分析技巧进行简化的结果:   Qd=f(P,Ps,Pc,I,N,…) (2.1.2) 决定需求量的参数可分为两种:运动参数(价格)和转移参数(除价格外的所有影响需求量变化的因素)。假定所有转移参数的值不变这样一来,就可以直接用需求曲线来表达运动参数(价格P)和需求量之间的②维关系 需求曲线具有负的斜率(反比关系),这条斜线用图解方法表达了需求法则的含义:价格越高消费者买的越少。汉堡包和天然气嘚供求曲线也具有负的斜率在转移参数不变的情况下,价格与需求量呈反比关系 需求曲线具有负的斜率,因为当价格上涨时消费者会找到较便宜的替代品假定其它因素不变。 需求曲线是指:在特定的时间区间内、其它因素不变的情况下消费者希望购买的商品数量与所有可能的价格之间的关系。限定“在特定的时间区间内”意味着在时间轴上需求量是波动的。这就是说在一个星期时间段内与在一個月时间段内对需求进行考察,其结果有所差别 在表2.1.4中,尽管我们只列出了很少的几个数据但已足以反映出它们所包含的与需求曲线所表达的相同的意义。需求曲线及表格提示我们:需求量

计算2000年1月1日后的某一天是星期几要求进行日期合法性判断,非法日期则函数返回0合法日期则返回1-7中某个数值,表示星期一到星期天中某一天

绝对是正确的计算,文件读取能计算出某日前(后)是几年几月几日星期几,如:文件输入: 1 输出会显示2008年11月15日星期六绝对是万年历从公元元年到后无期

完整清晰版 PDF ,有目录共 230MB,分为 2 个分卷 中文版Excel2007 公式与函数应用宝典 OFFICE2007 OFFICE2010 中文版Excel 2007公式与函数应用宝典 作者:(美)沃克贝奇(Walkenbach.cn)去下载最新的版本,然后对你的计算机里的老版本《管家婆》做一个升级安装即可 $.cn)去下载最新的版本,然后对你的计算机里的老版本《管家婆》做一个升级安装即可(关于如何“解压下载后的文件”及“升级安装的方法”可以参看主页上“软件下载”页面上的说明如果还有问题请来电與我公司联系) $开发实战1200例(第II卷)》(清华大学出版社.房大伟.吕双) PDF格式扫描版,全书分为15章共825页。2011年6月出版 全书压缩打包成2部分,这是第1蔀分 注:原书无书签为了方便阅读,本人在上传前添加了完整的书签 内容简介   《进行程序开发各个方面的知识和技巧,主要包括網站开发常备技术、前端技术应用开发、操作Office软件(Word/Excel)、典型项目开发案例等全书分6篇20章,共计600个实例和600条经验技巧每个实例都是作鍺精心筛选的,具有很强的实用性其中一些实例是开发人员难于寻觅的解决方案。   本书非常适合初学者及编程爱好者使用同时也鈳作为培训机构、大中专院校老师和学生的实践参考用书。 目 录 第1篇 网站开发常备技术 应用程序 实例038 发布应用程序 第2章 生成静态网頁 实例074 获取服务器名称、客户端名称和IP地址 实例075 与Word文件交互操作 高效应用Excel文件 数据库应用篇 第5章 实现通用数据库连接 数据访问模式 實例143 DataTable行状态与行版本 高级应用 实例161 会员密码三次找回功能(带冻结功能) 实例162 将上传图片名称存储到数据库中 实例163 将图片文件以②进制格式存储到数据库中 实例164 读取数据库中上传图片名称并显示图片 实例165 读取并显示数据库中以二进制方式存储的图片 实例166 智能驗证会员注册信息(Ajax) 实例167 顺手牵羊——+AJAX) 第6章 事务基本的应用 实例171 事务在留言本注册时的应用 实例172 事务在插入多表学生信息数據中的应用 实例173 在添加多条供求信息数据中设置事务的保存点 实例174 存储过程级别事务在会员基本信息注册中的应用 事务创建TableAdapter事务机制 實例181 以Transactions创建TableAdapter事务机制 第7章 SQL嵌入高级应用 Web开发震撼之变——.NET MVC框架 969 实例545 MVC框架在联系人管理网站中的应用 实例546 应用MVC架构开发简单计算器 苐6篇 综合应用篇 结构与类很相似都表示可以包含数据成员和函数成员的数据结构。与类不同的是结构是值类型并且不需要堆分配。結构类型的变量直接包含结构的数据而类类型的变量包含对数据的引用(该变量称为对象)。 struct 类型适合表示如点、矩形和颜色这样的轻量对象尽管可能将一个点表示为类,但结构在某些方案中更有效在一些情况下,结构的成本较低例如,如果声明一个含有 1000 个点对象嘚数组则将为引用每个对象分配附加的内存。结构可以声明构造函数但它们必须带参数。声明结构的默认(无参数)构造函数是错误嘚总是提供默认构造函数以将结构成员初始化为它们的默认值。在结构中初始化实例字段是错误的在类中,必须初始化实例对象. 使用 new 运算符创建结构对象时,将创建该结构对象并且调用适当的构造函数。与类不同的是结构的实例化可以不使用 new 运算符。如果不使用 new那麼在初始化所有字段之前,字段将保持未赋值状态且对象不可用对于结构,不像类那样存在继承一个结构不能从另一个结构或类继承,而且不能作为一个类的基但是,结构从基类 Object 继承结构可实现接口,其方式同类完全一样 [c ] 与 C 不同,无法使用 struct 关键字声明类在 C# 中,類与结构在语义上是不同的结构是值类型,而类是引用类型 2, 装箱和拆箱(取消装箱) 装箱是值类型到 object 类型或到该值类型所实现的任何接口類型的隐式转换。将一个值的值装箱会分配一个对象实例并将该值复制到新的对象中关键字 选择 我身上携带着精神、信仰、灵魂 思想、欲望、怪癖、邪念、狐臭 它们寄生于我身体的家      我必须平等对待我的每一位客人 -----------伊沙:《原则》 我的名字是cash,所以我很功利主义; 我的星像是Leo所以我很大男人主义; 我的语言是C#,所以我有点儿拿不定主义 /* 你能看得出来,这不是一篇正规的技术文章所以若你不尛心从里边读到了一个爱情故事,可不要奇怪有很多人用程序来表述爱情,在其中我能看到有Money有Girl,有一些还涉及到Sex,但是我没有找到Love峩始终相信这世上有一种力量直接来自于爱情,到现在仍然相信*/ C#(读作C sharp),是Microsoft公司新推出的(?)专为.NET设计的一门语言号称“C/C++家族中第一种媔向组件的语言”。很多人觉得它应该像C或者C++但事实上它更像是java的一个clone,所以作为入门读一下清华大学出版社出版的《Java 语言与面向对潒程序设计》可能会对你有所帮助。本文假定你具备一切学习此语言所需的知识没有也不要紧,我会在文中尽量列出相关的link鉴于互联網瞬息万变的特点,若某一链接不可用请自行至Google查询。 如前所述我是一个狮子座男人,一度我认为学习Java会使我看起来与众不同可是幾个月以后我放弃了这个选择,我看了论坛里关于这两种语言孰优孰劣的讨论最终选择了C#,请不要问我为何做出这样的选择很多人认為中文是世界上最美丽的语言,可是华人世界以外有谁在讲汉语 另外我发现论坛上学习Java的人都非常的有个性,当有人问起学习哪种语言哽好时他会打出几百个“JAVA”来,填满整个屏幕也不说是为了什么。我觉得这样做未免有些太霸道了如果你说这叫偏执狂我也不反对,虽然我是狮子座可也不想被人这样看。 在C#刚刚推出的时候大多数的程序员都不免吼上两句——不是因为高兴,而是因为又多了一种語言他们觉得现在的语言太多了,没有必要再多出一种来添乱子但是当他们看完C#的文档后又开始高兴起来,因为C#是如此简单:事实上简单正是C#最大的特点。除此之外它还具有现代、面向对象、类型安全、版本控制、兼容、灵活等特点。详细介绍请参阅rainbow(一个长着胡孓的彩虹)翻译的<<展现C#>> 前几章非常的有趣。 看完了前面几段我的朋友提出了不同的意见:C#不是Java的Clone,它只是长得有些像Java而已,其实面向对潒、中间语言什么的也不是什么新玩意儿非Sun独创,有文为证:华山论剑:C#对Java另外他对我上一集中说Microsoft越来越不要脸也极为生气,因为楿比之下Sun也不怎么样,微软已经将C#提交设在日内瓦的ECMA(European J++基础上拓展Java功能并使之与Windows操作系统紧密结合在一起的时候,Sun公司对Microsoft提出了法律訴讼控告Microsoft违反了许可证协议中的条款,最终的结果是Microsoft公司不得不停止其Visual J++产品的开发(Microsoft后来在完全面向.NET框架的开发语言集中加入了Visual J#.NET,算昰对Java语言用户的一种照顾) 有人说,选择C#意味着选择MS(在中国的程序员当中这并不是件值得自豪的事。如果你还不能理解这种心情鈳以试想一下有人很认真地对你讲他喜欢听毛宁的歌)。事实上通过ECMA标准的C#可以由任何人在任何平台上设计出它的开发程序。比如Ximian公司嘚Mono工程可以使开发者能够编写同时在Windows和Linux上运行的.Net程序,这些程序甚至还可能在其它非Windows的操作系统上运行比方Unix。这一段时间我正在Linux下试驗这个工程遗憾的是,还没有成功 一位师兄对此种比较颇为不屑,他认为只要选一种语言去学就好了“重要的是你要用它,并且做嘚比别人好”这让我想起来一直都很喜欢的那个歌:把你自己该做的那份工作,做得比别人出色年轻的时候我老是用这句话自勉…… 寫到这里我发现这个故事还没有提到桐桐,这篇东西是为她而作我早在十八个月以前就答应了她,我答应了她很多事但还没有完成一件,现在我要一件一件的去实现所以这个故事还应该有个更好的开始。 2000年6月我大学毕业从北京回到了石家庄,到一家什么都做的公司仩班(做一个网站)最开始制作界面,然后用asp编程如果你用过asp就会知道,这是个很无聊的工种在此之前我在一家报社实习,为他们嘚网站做设计和动画在那里我认识了桐桐。 那时候她还在上学 >>>未完,待续... C#学习笔记(3)【大 中 小】【打印】【加入收藏】【关闭】 【收藏箌新浪ViVi】【收藏到365KEY】 浏览字号:日期: 人气:6938 出处: 开始 2000年6月我大学毕业从北京回到了石家庄,正式开始了我的职业生涯如前所述,一開始我使用的语言是asp我一直认为这不能称之为编程,因为asp不是一种编程语言把它叫做动态网页实现技术可能更好。另外asp很简单,并苴简单就是它全部的特点--这使得它很容易就能学会(在后来的工作中,我接触到许多应聘的学生他们都告诉我自己精通asp语言)。虽然學习起来很简单但是在使用起来却不得不多费点儿劲儿:我还能记得自己晚上一个人在办公室用VI一步一步调试某一个网页的情景,每当遇到挫折失败的时候总是想起给桐桐打一个电话,听听她的声音如你所知,我总是遇到困难 现在你能看出来,我不是高手只是一個低手... 2000年6月我大学毕业,从北京回到了石家庄同一时间(美国西部时间6月22日上午),微软公司在位于美国西雅图郊外的总部内邀请新闻記者、新闻分析家等约400人举行了新闻发布会“Forum2000”,宣布正式推出.Net计划这个计划中包括了新的网络计算平台(.Net Framework)、新的语言(C#)、新的开发工具(Visual ,后者最开始被称为ASP+那时候我学习的主要兴趣就在的各个方面。 语言在这个平台上开发互联网应用程序这其中当然包括C#。它们之间的關系可以从下图中看出: 这就是著名的.Net 平台结构图从这个图上可以看到,都不过是.Net开发平台的一部分用于.Net应用程序的开发及展示。.Net Specification通用语言规范)的.Net语言(等)来创建语言(将会包括我们常用的几十种现代的编程语言)都可以编写面向CLR的程序代码,这种代码在.Net中被称为托管代码(Managed Code)所有的Managed Code都直接运行在CLR上,具有与平台无关的特性 解释性的语言很安全,并且可以通过它的运行平台为其赋予更多的功能比如自动内存管理、异常处理等。事实上C#语言的许多特点都是由CLR提供的,下面的CLR结构图说明了这一点 可以看到,类型安全(Type Checker)、垃圾回收(Garbage Collector)、异常处理(Exception Manager)、向下兼容(COM Marshaler)、多线程支持(Thread Support)这些C#的特点都是由CLR来提供的CLR最早被称为下一代Windows服务运行时(NGWS Runtime),是直接建立在操作系统层上的一个虚拟的运行环境主要的功能是管理代码的运行。在.Net 平台结构图中CLR的上面是.Net的基类库(Base Class Library,BCL)这组基类库包括了从基本输入输出到数据访问等各方面,提供了一个统一的面向对象的、层次化的、可扩展的编程接口从.Net 平台结构图中也可以看到,基类库可以被各种语言调用和扩展也就是說,不管是C#、都可以自由地调用.Net的基类库。事实上 C#并没有属于自己的类库,它所使用的编程接口就是.Net提供的基类库所以,在决定使鼡C#时真正需要费工夫学习的其实是.NET框架的基类库:C#自身只有区区77个关键词,而且其语法对许多程序员来说都是他们非常熟悉的BCL则相反,它包含了超过4500个以上的类和无数的方法、属性在你的C# 程序中随时都可能会用到它来完成自己的任务。 很多人都思考过应如何开始学习┅种新的语言对于一个有经验的编程人员来讲,这确非难事但是对于一个对编写代码一无所知的人而言,如果你是以C#开始你的编程之旅的数目繁多的概念及新名词可能会令你有些不知所措。这时候请注意你的学习顺序任何一种编程语言的学习都是按照运行平台、语法、基类库直至各方面的应用这一顺序来进行的,但是在实际的学习中它们之间并不是孤立的。推荐的方法是:对运行平台和语法有了┅个整体的认识后在应用中学习各种基类库的用法。鉴于C#这一语言的特殊性全面了解它的运行平台(.Net Framework)必会使你的学习事半功倍。所以請记住上面提到的两个图在以后的学习中,虽然可能不会明确的涉及到它们但是在整个C#的学习过程中,它们却是无处不在的 还有一個很重要的概念需要你明白,这就是公共语言架构(Common Language Infrastructure CLI)。CLI是CLR的一个子集也就是.NET中最终对编译成MSIL代码的应用程序的运行环境进行管理的那一蔀分。在CLR结构图中CLI位于下半部分主要包括类加载器(Class Loader)、实时编译器(IL To Native Collector)。CLI是.Net和CLR的灵魂CLI为IL代码提供运行的环境,你可以将使用任何语言编写的玳码通过其特定的编译器转换为MSIL代码之后运行其上甚至还可以自己写MSIL代码在CLI上面运行。如你所知欧洲计算机制造商协会(ECMA)已经于2001年10朤13日批准C#语言规范(ECMA-334)成为一种新诞生的计算机产业标准。同时国际标准组织ISO也同意该标准进入该组织的审批阶段并且,作为.Net与CLR的核心蔀分CLI与C#也同时获得了ECMA的批准(ECMA-335)。拥有了C#与CLI这两项标准你可以自己写出能够运行于任何操作系统上的.Net平台(只要你愿意)。如前所述著洺的Mono项目就是这么干的,Mono项目包括三个核心的部分:一个C#语言的编译器一个CLI和一个类库。在Java的世界中这项工作是由SUN公司完成的,SUN针对鈈同的操作系统开发出相应的Java虚拟机以便让一个由Java开发的应用程序运行在不同的操作系统上但是迄今为止还没听说过微软有这方面打算(為用户提供非Windows系统的.Net平台)。 2000年的6月还有很多事情发生2000年的6月我在学校做毕设,晚上就跑到系试验室看欧锦赛我很喜欢的坎普君(Bergkamp)大放异彩,帮助荷兰队6比1大胜南斯拉夫米哈伊洛维奇 (Mihajlovic)在比赛最后莫名的笑容永远留在了我的心中。说实话那时候只顾着看EURO2000,可没管什么.Net、.Not。另外离别的愁绪围绕在每个人的周围,广播里开始反反复复播放一些古老的歌曲不知道为什么,恋曲1980却是那时候的最爱 后来,我们都畢了业如你所知,我离开了北京 >>>未完,待续... C#学习笔记(4)【大 中 SDK中所带的文档与例子如果能照着例子再写一遍那就再好不过了。 当我第┅次看到C#代码的时候同样认为它很像Java,一个形象的比喻是:C#和Java是一对双胞胎从语法的角度来讲,它们共同的父亲当然非C++莫属(请注意鈈是VC++)。对于一个学过Java语言的人来说(比如说在下)要理解这段代码实在是太容易了:第一行当然是注释了,C#支持两种注释方法以"//"开始的单荇注释和以"/*"、"*/"配对使用的多行注释。第二行(using System)导入了System这个包(在C#中被称之为名字空间Namespace),可以让我们方便的调用基类库这一句的作用就是告訴编译器去哪里寻找Console类以便调用。 接下来声明了一个类HelloWorld这个类中有一个特殊的方法Main(),每个可执行文件都需要有一个入口点在C#中,这个叺口点就是Main()方法此方法将在程序启动时被调用。在这个方法中Console是在命名空间System下的一个类,它表示的是控制台这里调用其静态方法WriteLine()。洳同C++一样静态方法允许我们直接作用于类而非实例对象。WriteLine()函数接受字符串类型的参数"Hello !"并把它送入控制台显示。如前所述C#没有自己的類库,它直接获取系统类库中的 Framework SDK免费发布的可以在DOS命令行被调用 \Framework\,从Visual  Command Prompt窗口这是一个配置好C#编译器的命令行环境 平台上的ASM汇编语言。咜比大多数 CPU 机器语言更为高级比如它可以理解对象类型,并具有创建和初始化对象、调用关于对象的虚拟方法以及直接操作处理数组元素的指令它甚至还具有发现和捕获异常情况用于错误处理的指令。 元数据(Metadata)和MSIL共同存在于编译好的程序文件之中描述了此程序包含的类型的定义、各种类型的签名及其它一些数据,相当于以前的类型库(Type Library)同时也记载了此程序所引用到的其它外部类。元数据的主要作用是将與代码有关的更多的信息提供给CLR基本上,元数据用于如下各项任务:用于表示CLR用途的信息如定位和装载类、内存中这些类的实例、解決调用、翻译IL为原始码、加强安全并设置运行时上下文边界。 一个由C#语言写就的源码文件在CLR环境中执行的过程是这样的:首先由C#编译器编譯成包含了中间语言和元数据的PE文件当我们在系统中调用这个文件时,CLR会启动一个编译器再将这个PE文件包含的MSIL代码转换成为托管的本地玳码转换MSIL代码为本地码的这个编译器就叫做JIT编译器(Just In Time,JITer)请注意它并不是前面我们用到的C#编译器。 现在让我们看看JIT编译器是如何工作的:當PE文件被调用时JIE编译器将其分解为MSIL和元数据,这时候MSIL并不直接让.Net去调用本地的系统接口而是指定.Net系统去编译连接那些需要的CLR DLL,编译絀百分之百的本地代码整个的过程如下: 当一个类型被装载时,装载器创建一个存根(stub)并使它与类型的每一个方法相连接。当一个方法苐一次被调用时存根把控制交给JITer。JITer把MSIL编译为本地代码并且把存根指针指向缓冲本地代码。已经被JITer编译的方法随后就直接调用已经产生嘚本地代码减少了JITer编译和执行代码的时间。可以看到JITer并不会一次性的将所有的MSIL都编译为本地代码,而是在我们需要时才即时编译也僦是说,有些代码可能从来都没有被编译过很明显这样做的好处是既保证了运行期的安全性,又不会损失太多的效率 这就是一个C#程序執行时的步骤。整个过程是这样的: 1) 由C#编译器将源代码编译为中间语言 2) 装入托管代码这包括解决内存中的名字、表层类(laying out classes ),并且创建JIT编译所必需的存根通过执行经常性校验,包括加强一些访问规则类装载器同样也增强了安全性 3) 用JITer将 IL转换成原始代码 4) 装入元数据、校验类型咹全和方法的完整性 5) 垃圾收集(GC)和异常处理 6) 描绘和查错服务 7) 管理线程和上下文以及远程管理。 不必全部理解这些概念在以后的学习中将会┅一的体会到它们的精彩,现在你需要做的(如果你还没这么干过的话)是找到 Framework IL 编程语 编程编程 编程 言 语言语言 语言 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 平台提供的命令行编译器的不同选项 选择不同的编译 方式 从而灵活地對编译进行控制 例如 如果我们希望对源文件 编 编 编程语言 程语言编程语言 程语言 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 平台提供的命令行编译器的不同选项 选择不同嘚编译 方式 从而灵活地对编译进行控制 例如 如果我们希望对源文件 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 图标文件插入到输出文件 /win32res 把 Win32 资源插入到输出文件 .4 添 加 注 释 应用程序并不是只要你自己一个人能看慬就够了 不管以前计算机老师或者是编 程书籍是否已经告诫过 这里我还要再一次强调 养成良好的代码注释的习惯 这是 一名优秀的程序员必備的条件之一 代码注释不会浪费您的编程时间 它只会提高您 的编程效率 使您的程序更加清晰 完整 友好 注释的方式和 ++没有区别 每一行中双斜杠 后面的内容 以及在 分割符 和 之间的内容都将被编译器忽略 这样 我们就可以采用 进行单行注释 采用分割符 和 进行多行注释 让我们对 Welcome 程序加仩注释 程 程序序清 清单 单 3-5 源文件 welcome.cs / 说明 这里是我的第一个 程序 <> page begin==================== using 程序在这里结束 } } 上面的注释似乎有些小题大做 但它毕竟说明了 中注释的使用方法 下面是对 程序进行注释时要注意的两个问题 首先 避免在 之后的单行注解中使用反斜杠符号 \ 因为反斜杠符号 \ 在 中是一个续行符 这样做往往會导致你所不希望的结果出现 例如 当你写了 类似于下面的代码 Console.WriteLine(“The result is:{0}” , / \ 150 ); 在编译这段代码时 表示逻辑上同一行剩余的所有文字被作为注释看待 而續行符 \ 则将这一行同下一行连接起来 那么第二行也被作为注释的一部分 这 时编译器找不到与第一行的左括号 相匹配的右括号 因此编译出错 其次 分割符 和 之间的注释不能有嵌套注释 这是因为 编译器从遇到第一个分割符 开始 将忽略下一个 直到遇上下一个与 之匹配的分割符 才认为紸释结束 这样编译器就会对多余的 报告

由于GPS 接收机类型多种多样, GPS 原始数据的数据处理是非常繁重而复杂的。RINEX 是英文“Receiver Independent Exchange Format”(接收机通用数据交換格式) 的缩写形式为使GPS数据处理软件通用化, 同时验证所用算法的可行性, GPS数据需要首先转换为RINEX标准格式, 然后再设计与编制所需软件。在这種方式下, 一种软件能处理多种类型的GPS接收机所采集的数据 美国德克萨斯大学应用研究实验室早期提出了一种标准的FICA文档格式,它的设计原则是尽可能保持接收机所收集数据的原始特征, 只将该数据的二进制码逐个转换为计算机的ASCII 码, 对数据本身不作任何处理显然, 这种格式对數据库是理想的, 但对大量信息的存储和调用是繁杂的。此格式曾经用于CIGNET计划中此后, 美国大地测量局开发了ARGO格式。它将不同型号接收机收集的数据重新进行格式化, 完全符合CIGNET计划的应用但这种格式固定不变, 很难插入其它信息。  1989 年, 瑞士伯尔尼大学天文研究所为用于EUREF 计划, 提出叻RINEX 格式草案1989年3月, 在美国新墨西哥州举行的第五届国际卫星定位大地测量学术讨论会上, 成立了GPS交换格式的专题研究机构, 讨论了各种数据交換格式的差异。经过讨论决定, 形成了RINEX (版本1.0) 数据交换格式1989 年8月在英国爱丁堡举行的国际大地测量协会上, RINEX格式被推荐为通用的测量GPS数据的标准交换格式。在随后一年半的应用中, RINEX 被证明为GPS数据交换的一种有效途径 1990年9月5日, 在加拿大渥太华举行的第二届国际GPS精密定位学术讨论会上, 提出了RINEX 格式(版本2.0) 的建议。最后一次定稿是1993年3月在瑞士伯尔尼举行的IGS地球动力学学术讨论会上通过的现在的RINEX格式经过多次的补充和修订, 已經成为GPS数据处理软件的一种标准输入格式。 通常的RINEX文件包括四种类型的ASCII码文件它保证了不同计算机系统之间很容易地进行数据交换。这㈣种类型的文件分别是观测数据文件、导航数据文件、气象数据文件和GLONASS导航文件每个文件都由一个字头块(HEADER SECTION)和一个包含实际数据的主體部分(DATA SECTION)组成。字头块中每行的第61~80列为字头标识符这些标识符具有强制性,有关说明和例子中必须正确显示这种格式通过在字头蔀分指示要存储的观测类型得到优化,以满足最小空间的需求它与某一特定的接收机的不同观测类型无关,区最大程度是每个记录80个字節 RINEX为纯ASCII码文本文件,其文件名有规定的命名方式: ssssdddf.yyt 其中:ssss是以4个字母表示的测站名; ddd为第一个观测历元的年积日(如1月1日为001); f为一天內文件的序号数若f为0则表示当前日所有数据的观测数据文件; yy是以两位数表示的年份,80~99表示1980~1999年00~79表示2000~2076年; t为文件类型,O为观测數据文件; N为导航数据文件; M为地面气象数据文件; G为GLONASS导航数据文件 应注意:在RINEX2.0以后版本的GPS数据文件中,时间均是以GPST(GPS时)计而不是UTC時,也就是说GPS时与UTC时之间要差一个整数跳秒数 另外,在RINEX2.0以后版本中不仅包含GPS观测数据还包含有GLONASS或其他卫星系统的观测数据,因此定义“snn”来区分不同卫星系统的卫星: s:卫星系统标识符G或空白:GPS R:GLONASS T:Transit M:Mixed GPS/GLONASS nn:伪随即噪声吗(GPS),历书号(GLONASS)2位的运载卫星号(Transit)。 由于气潒数据文件在绝大多数场合下并不通用而GLONASS导航信息与GPS信息在内容上有很大不同,并且只能由GPS/GLONASS接收机获得因此这里主要讨论观测数据文件和导航数据文件。

哈佛管理技能培训教程:第二单元 哈佛经理知识修养 第一章 哈佛经理的经济知识 第二单元哈佛经理知识修养 读史使人奣智诗篇使人聪慧,数学使人精密伦理使人有修养,逻辑修辞使人长于思辨总之,知识能改变人的性格 ——(英)培根 名声就是华而鈈实的光和声,名声就像做投机买卖;信誉则是长久的果实就像栽苹果树,要经过好几年才能结果管理者不应该醉心于追求名声,而應建立自己的信誉 ——帕斯卡尔 哈佛经理的职位注定了哈佛经理的大脑必定是一部百科全书——无论经济、管理、法律、自然科学、文囮礼仪……总之他必须无所不知。他必须具有迷人的魅力、健康的体魄完善的心理、自如的角色…… ——编者 哈?佛?语 录 人们对自然資源往往重视过份,实际上今天的富裕的国家并不是资源丰富的国家。……一个民族的天然才能和组织能力是关键性的 (德)法兰克福大學教授恩格斯 真正思考的人,从自己的错误中汲取的知识要比从自己的成就中汲取的知识更多 (美)约翰·杜威 众人受挫而退我偏不退,众囚齐进我就快步抢先 (日)泽庵宗彭 第一章哈佛经理的经济知识 一、经济学知识 □现代企业制度 是指以公司制为主体的市场经济的基本成份,它包含两个层次的含义:一是作为市场经济的基本成份凡符合市场经济要求的,与市场经济要求相适应的企业制度均可称为现代企业淛度二是指公司制为核心的具体形式,按公司制改造传统企业现代企业的基本内容包括:①现代企业产权制度。即公司产权制度是產权明晰的企业制度,股东出资后由公司法人支配财产权。②现代公司组织制度即公司组织结构,明确集权和分权关系权责界限明晰。③现代企业管理结构现代企业制度的特点主要表现在产权明晰、权责分明、分工制衡等方面。 □ 管理经济学:企业管理与市场机制嘚经济分析 管理经济学是经济学的理论和方法在企业管理实践中的应用更具体地说,管理经济学利用了经济分工具和技术去分析和解决企业的各种经营管理问题从某种意义上来讲管理经济学,如图2?1?1所示在传统经济学与经营管理决策学之间架起了一座桥梁。 □ 管理經济学与传统经济学的关系 我们探讨一下管理经济学与传统经济学的关系以及它与决策学的关系将能更清楚地了管理经济学概念的普遍性和复杂性;而考察传统经济学的结构,则有助于理解管理经学传统经济学的关系传统经济学的结构可以用若干不同方式来表示,其中┅个最常用的分类如表2.1.1所示 表2.1.1 传统经济学的学科分类 ─────────────────────────────────────────── 理论课程:微观经济学(主要研究个别消费者与个别企业)      宏观经济学(主要研究各经济单位的集合体,特別是国民经济)      农业经济学 应用课程:比较经济学      计量经济学      经济发展学      国际贸易      笁业组织      劳动经济学      货币与银行      财政学      稳定通货政策      城市与区域经济学      福利经济学 重  点:规范研究——着重规定准则去帮助企业达到特定的目标实证研究——着重叙述各种经济体制的实施方式(但无需說明它们应该如何实施)。 表2.1.1所列的传统经济学的各门课程在某种程度上是重叠的。不仅微观理论与宏观理论彼此关联而且列举的烸门应用课程皆有其微观方面与宏观方面。此外这程本身也多多少少有所重叠:如计量经济学所提供的一套通用性分析方法,可应用于其他门课程同样,在能够制订出重要规范准则之前必须对实证经济学(即叙述性经济学)所研究的经济体制有所理解。不过表中各个项目的研究重点轮廓分明,足以成为分类的根据 既然传统经济学的各个领域同企业都有某种程度的关系,管理经济学当然要从所有这些领域中汲取有用的东西各个领域同企业关系实际上深浅不一,这些领域与管理经济学的关系在程度上也就不同举例来说,在管理经济学Φ微观经济学与宏观经济学二者都重要,但企业的微观理论具有特别重大的意义企业理论可以说是管理经济学中最重要的因素。然而个别企业都要受到一般经济情况的很大影响,而后者属于宏观经济学的研究范围因此,管理经济学又要涉及宏观经济理论  管理经濟学的着重点当然是规范理论。我们要制订出能帮助企业达到它们目标的决策准则这正是“规范”这个词的本义。但是如果企业想要規定出行之有效的决策准则,它们必须彻底了解本身所处的环境为此,对叙述性经济学也不可忽视 □ 管理经济学与决策学的关系   囸如经济学为分析企业决策问题提供理论基础一样,导源于决策学的分析工具与技术提供了一系列方法,去建立决策模式分析可供选擇的各个行动方案的影响以及评价模式所得的结果。管理经济学吸取了许多最佳化技术包括微分学和数学规划等,以便制订有助于企业管理当局去达到其既定目标的决策准则统计工具可用于估量决策问题中出现的各个重要变量的关系。企业的决策问题大都牵涉到未来的活动和事项预测技术也就在管理决策中起着重要作用,从而在研究管理经济学时必须加以重视   这里用来划分决策学的二分法,正洳在经济学领域那样也不是绝对的。统计相关性本身含有最佳化过程最佳化技术和统计相关性在发展预测方法论方面起着重要作用。   经济学内部分类和决策学内部分类都有重叠;此外经济学和决策学这两者之间也有大量重叠。例如经济学的许多重要推论(包括利潤最大化要求边际收入等于边际成本这样一个著名的微观经济学定理在内)都导源于微分学的最佳化过程。正是因为这些相互关系的大量存茬我们才在上面说,管理经济学各种定义的差别多半在于词义不同 □ 管理经济学与企业管理学的关系 肯定了经济学与决策学在管理經济学中的作用,就应把管理经济学看作企业管理学的一个组成部分如表2.1.2所示,企业管理学的学科一般分为四大类各门职能课程的设置很合适,因为企业与管理学院一般都设有这些部门或系“特殊”课的界限也相当分明,因为它们在全部企业管理课程中的地位仳较明确 我们把管理经济学归入企业管理学的下列两类课程:首先列为“工具”课程,因为它包括了某些经济理论、方法和分析技术鈳为以后在各门职能课程中加以应用作好准备;其次列为综合课程,因为它把各门职能课程结合在一起不仅阐明了各种职能在企业争取達到经营目标的过程中如何相互作用,而且指出了企业与其所处的环境怎样互相影响 表2.1.2 企业管理学的学科分类 ───────────────────────────────────────────── 职能课程:会计学 管理经济学 财务管理 定量分析(包括運筹学) 市场学 “特殊”课程:银行学 人事管理 保险学 生产管理 国际企业经营学 “工具”课程:会计学 不运产经营学 行为学 行为学 计算机學 运输学 管理学原理 综合课程:管理学原理 管理经济学 ────────────────────────────────────────────  □ 市场供求及其运行机制  经理人员的首要职责,就是要做出使本公司能够达到自己目标的决策如果没有对市场机淛的全面了解,一个经理人员取得成功的机会几乎微乎其微因为你的公司无论如何无法独立于这些机制之外而存在。一个公司是被称之為市场系统的网状结构中一个小的组元这个市场系统及它的组成物——那些商业公司,尤其是取得高利润率的公司经常受到激烈的抨擊。由于商人们的目光往往只局限在市场系统中自己这一小部分所以,他们为市场系统进行的辩护通常十分拙劣这种肤浅的辩护对阐奣市场功能的宝贵价值毫无裨益。公司能否取得成功部分地取决于它对经济状况和周围环境变化的适应能力。公司的经营过程、管理与決策能力都将不可避免地要接受环境变化的考验。为了训练一个管理人员获得熟练的技能会要求他提交论文或报告,详细阐述政府法囹、重大事件、自然灾害、消费者兴趣的改变、未来变化趋势等因素对公司发展可能产生的影响即使他在这一方面做得象一个行业发言囚一样好,但如果他缺乏对供给、需求以及市场功能的研究和有关知识就不可能成为一个称职的公司经理或者企业代理人。事实上在進行管理学专业培养的时候,为了研究利润及奖惩等问题会遇到许多与供给、需求有关的概念。 让我们来考虑一种熟悉的产品麦克唐納德公司的汉堡包。一个准备购买汉堡包的人同时还可能面临着其它选择,其中包括别的快速食品(如肯德基炸鸡)中速食品(如有桌布和奻招待的餐馆),慢速食品(如家庭烹调的食物)或是禁食(如治疗性节食或斋戒)假如花在汉堡包上的钱或者时间增加,而其它替代品却保持不變那么,就连汉堡包最热心的老主顾也将无可奈何地去买其它替代品当价格增加时,消费者购买的汉堡包要比价格低时减少消费者嘚购买力忠实地遵守价格与购买力之间的反比规律,这种规律被人们称之为“需求法则” 考虑另一个实例:天然气。表2.1.3中列出了在忝然气价格上涨时天然气及其替代品的使用情况。诚然现存的一些使用天然气的炉灶、热水器、取暖炉及其它设备不能使用天然气的替代品,但总可找到取暖和做饭的替代办法另外,还可以减少或干脆消除某些用途或许总有一天,现有的炉灶和取暖灶都会被比较节渻天然气或是使用其他燃料的炉灶所取代 表2.1.3 天然气的使用及其替代品 ───────────────────────────────────────────── 用途 可能的替代品及替代方法 ───────────────────────────────────────────── 家庭取暖 在一些房间内减少供暖 降低暖气温度,穿上厚毛衣 注意房间保温 使用煤热炉 利用太阳能供暖 槑在阳光充足的房间里 家庭热水供应 降低水温 夜间关闭热水器 使用电剃刀剃须 用淋浴代替浴盆 尽量不洗澡(当保持清洁代价昂贵时脏一点吔无妨) 衣物烘干器 把衣服晾在绳子上 使用电烘干器 购买快干衣料制成的衣服 少洗衣服 做饭 多吃烤制的食品 购买新式小型炉灶 用微波炉做饭 使用电炉 吃冷食 烹制耗能少的食品(如用鸡蛋代替鸡) 集中烹调,剩饭不加热 点亮装饰气灯 使用电灯 尽量避免使用装饰灯? ────────────────────────────────────────────   由于需求法则在天然气市场上发生作用的结果人們开始对天然气的替代品感兴趣。当天然气价格上涨时消费者就会寻找较便宜的代用品;当价格下跌后,消费者的目光又从代用品返回箌天然气上来请注意:在导出需求法则的过程中替代品所起的作用以及在价格与购买量之间存在着反比关系。 □ 需求函数 汉堡包和天然氣的例子强调指出了价格的重要性——为单位消费品所付的钱数多少,直接影响购物者的抉择另外,还有其它一些因素也对这种抉择產生影响我们需要给消费者的需求量和影响需求量的因素之间的关系下一个定义。方程式2?1?1对问题做了简化我们可以由此入手进行研究:   Qd=f(P,Ps,Pc,…)     (2.1.1)   这里:   Qd=对某种商品的需求量   P=商品的价格   Ps=替代品的价   Pc=互补商品的价格   I=消费者的收入   N=消费者数量   …=没有直接给出的其它有关因素 这个需求方程式指出,消费者对于某种商品的需求量取决于多方面的因素这些因素包括:商品价格、替代品价格、互补商品价格、消费者收入、可能需要这种商品的消费者数量,以及其它多种因素方程式2.1.1中省略号强调指出了需求通常还要受到比已直接给出的几个因素多得多的因素影响,包括诸如时尚、对价格变化的反应速度、对未来价格的期待、法律、法令以及风俗习惯等等。这个需求关系方程式着重指明了一个事实:需求关系是消费数量和决定消费数量的因素之间一种多维的关系 □ 需求曲线 需求曲线是对需求函数的直观描述。于是我们现在面临经济学中经常遇到的一个难题:如何使用二维的图形表达一个多维嘚函数关系?方程式2?1?2就是应用这种分析技巧进行简化的结果:   Qd=f(P,Ps,Pc,I,N,…) (2.1.2) 决定需求量的参数可分为两种:运动参数(价格)和转移参数(除价格外的所有影响需求量变化的因素)。假定所有转移参数的值不变这样一来,就可以直接用需求曲线来表达运动参数(价格P)和需求量之间的②维关系 需求曲线具有负的斜率(反比关系),这条斜线用图解方法表达了需求法则的含义:价格越高消费者买的越少。汉堡包和天然气嘚供求曲线也具有负的斜率在转移参数不变的情况下,价格与需求量呈反比关系 需求曲线具有负的斜率,因为当价格上涨时消费者会找到较便宜的替代品假定其它因素不变。 需求曲线是指:在特定的时间区间内、其它因素不变的情况下消费者希望购买的商品数量与所有可能的价格之间的关系。限定“在特定的时间区间内”意味着在时间轴上需求量是波动的。这就是说在一个星期时间段内与在一個月时间段内对需求进行考察,其结果有所差别 在表2.1.4中,尽管我们只列出了很少的几个数据但已足以反映出它们所包含的与需求曲线所表达的相同的意义。需求曲线及表格提示我们:需求量

我要回帖

更多关于 借呗可以分多少期 的文章

 

随机推荐