我想彻底的我想多了解一下下京东方A这家公司,通过光变,还有没有其他资料。

作者 | 黎明 苏琦 金玙璠 唐亚华 孔明奣 孟亚娜 赵磊

编辑 | 魏佳 贺树龙

瑞幸“自爆”行业哗然。

昨天(4月2日)美股上市公司瑞幸咖啡宣布,在审计2019年年报发现问题后董事会荿立了一个特别调查委员会。委员会发现公司2019年二季度至四季度期间,伪造了22亿元****的交易额相关的成本和费用也相应虚增。

公开“自爆”财务造假瑞幸咖啡让所有人大跌眼镜。当天股价暴跌75.6%市值缩水至16亿美元。

事情似乎早有端倪两个月前,让很多中概股闻风丧胆嘚做空机构——浑水(Muddy Waters Research)公开了一份匿名的做空报告,指控瑞幸咖啡涉嫌财务造假门店销量、商品售价、广告费用、其他产品的净收叺都被夸大,2019年第三季度瑞幸的门店营业利润被夸大3.97亿元

但当时瑞幸咖啡在SEC官网发布公告坚决否认了报告中的所有指控,称报告基于毫無根据的推测和对事件的恶意解释

从2017年成立至今,争议一直伴随着这家公司它被质疑烧钱补贴、商业模式难以为继,但却在短短两年時间里募集了超过10亿美元资金,开出了超过4500家咖啡门店刷新了中概股最快上市纪录。

这样一家明星企业为何要自曝“家丑”?造假荇径见光背后谁在蓄意做空和调查瑞幸?这场骗局的罪魁祸首是谁瑞幸的未来又何去何从?

燃财经采访了十几位知情人士、专业人士为你深度揭秘瑞幸咖啡财务造假曝光始末。

1、瑞幸为何“自爆”

现在看来,2个月前那份神秘的做空报告没有将瑞幸彻底击倒,但却昰引发瑞幸“自爆”的****

从浑水发布做空报告,到瑞幸自曝造假这中间相差了正好两个月。在这两个月时间里发生了三件极其重要的倳情。

一是集体诉讼因为股价下跌,投资者蒙受损失一些律师事务所开始启动针对瑞幸的集体诉讼程序。

二是遇上财报披露季2月底開始,中概股公司纷纷开始披露2019年四季度及2019全年的财报报告瑞幸自爆前,大部分中概股已经完成财报披露但瑞幸迟迟未披露。

三是独竝董事变更4月2日,瑞幸成立特别委员会新增两名独立董事,其中一个来自行业里有名的调查审计师FTI另一个来自世界级名牌诉讼律所Kirkland & Ellis。

我们梳理一下整个事件的时间线:

· 2月1日凌晨(周五)浑水发布做空报告,瑞幸股价盘中最大跌去26.5%

· 2月3日晚(周一),瑞幸在SEC发布公开回应坚决否认所有指控。

· 2月4日开始瑞幸股价逐日回升,2月10日已经恢复到被做空前的水平

· 2月5日,美国部分律师事务所开始启動针对瑞幸的集体诉讼

· 2月10日开始,瑞幸连续发布15条“超过5%披露”的重要公告涉及股东股权事宜。

· 3月27日瑞幸宣布任命两名新的独竝董事,刘二海卸任审计委员会成员

· 4月2日,瑞幸成立“特别委员会”启动内部调查,“自爆”公司存在22亿元的财务造假瑞幸股价┅夜跌去75%。

某国际投资银行董事告诉燃财经瑞幸“自爆”,是遭遇做空后的连锁反应因为瑞幸之前被做空,于是有做空基金将它告上法庭按照美国证监会要求,瑞幸要成立特别委员会进行自查于是查出了22亿元的惊天造假大案。

“美国是通过集团诉讼制让公众监察仩市公司。做空报告出来后美国证监会就会要求公司做公告回应,或者要启动调查”上述投行董事说。

有意思的是做空报告发布的時机,正值财报披露季前夕

一位长期研究美股的资产管理公司CEO对燃财经表示,“瑞幸咖啡是被迫自爆因为年报审计出了问题,如果不能按时递交审计的年报会直接导致退市。现在发现问题如果妥善解决,或许还能避免最坏的结果”

上海律协国际投资业务委员会委員资深律师倪富华、专业研究中概股的普楠PiCapital创始人冯斌,在共同接受燃财经采访时表示瑞幸咖啡被集体诉讼的两个理由是misstatement和omission of material fact。针对omission其構成要件为负有披露义务但是没有披露,可能误导投资者这也是为什么瑞幸发现造假行为以后,第一时间披露了这一事实这种行为也昰降低其未来责任的一种法律行为。

在2月1日的那份做空报告中瑞幸被指控财务造假,门店销量、商品售价、广告费用、其他产品的净收叺都被夸大2019年三季度瑞幸的门店营业利润被夸大3.97亿元。

虽然瑞幸在SEC回应中否认了一切但即将披露的四季度财报,将是检验谁在说谎的囿力证据

然而,在投资者等来这份财报之前瑞幸已经启动自查程序,一个特殊的临时机构——特别委员会成立了。

这个机构由三名獨立董事组成其中两个是3月27日加入,一个是4月2日加入三人都是审计委员会成员,此前愉悦资本创始人刘二海刚辞去其在审计委员会的職务

不少人对刘二海的辞任时机有猜测,对此愉悦资本向燃财经表示,刘二海是任期达到1年后按照证券法要求执行的正常换届此外,愉悦资本方面还称迄今为止并未出售任何瑞幸咖啡的股票。

一位投行人士表示“根据美国证券条例,上市公司合法合规是自己的责任在美股上市公司里,权力是环环相扣审计监管会计,独立董事监管执行董事所以,这次是瑞幸自己聘请外部机构来审查自己”

特别委员会提请董事会:从2019年第二季度开始,公司COO兼董事刘剑及其几个属下涉嫌从事捏造交易的不当行为,从2019年第二季度到2019年第四季度與虚假交易相关的总销售金额约为****22亿元在此期间,某些成本和费用也因虚假交易而大幅膨胀

瑞幸咖啡是2019年5月17日上市。这意味着瑞幸咖啡上市后的销售数据,大部分都是伪造的

“公司一旦造假,要么执董受罚要么独董受罚。独董要避免把关不力的责任就必须把造假责任推到执董身上。如果独董不找机构查执董执董就可以上法庭说独董监管不力,独董就需要为受害者赔偿” 一位业内人士称。

于昰在财报披露前瑞幸启动了“自爆”程序,三名独立董事组成的特别委员会揭穿了瑞幸此前对做空报告的回应。瑞幸财务造假正式浮出水面。

那么问题来了究竟是谁在幕后做空瑞幸?这份匿名报告的指控范围、发布时机、牵涉人员都耐人寻味。

一位做空产业链上嘚人士对燃财经分析浑水只是一个公开的做空平台,真实的做空势力(对冲基金)都会把自己隐藏在浑水后面——这份做空报告是匿名提交只是由浑水代为发布。

对冲基金做空一家公司的目的是获利做空的常见操作是:在发布做空报告之前,它们会向券商借入股票并高价卖出然后发布报告对相应公司进行打压,在股价下跌后便以较低价格买入相应的股票归还券商获取的利润便是买卖的价差。

不过对冲基金显然不会亲自在中国做实地调查工作。当锁定一家可能存在问题的公司之后它们一般会委托国内的调查公司寻找相关证据,具体方式包括实地考察(蹲点统计订单量、计算门店流水)、秘密访谈等对冲基金会根据工作量向这些调查公司支付相应的费用。

该人壵向燃财经透露本次负责在国内调查瑞幸咖啡的两家公司分别为:汇生咨询和久谦咨询,而站在它们背后的对冲基金是浑水在中国的“匼作伙伴”雪湖资本

多位知情人士向燃财经证实了这一说法,并且有人表示参与做空瑞幸咖啡的对冲基金不只有雪湖资本应该还有一镓,但雪湖资本是其中唯一的出资方兼主导方雪湖目前在北京和上海的工作人员加起来可能也就六七个人,主要团队在香港

对此,燃財经分别尝试联系雪湖资本、汇生咨询和久谦咨询截至发稿前,暂未得到他们的官方回应

但一位参与了做空事件的兼职人员对燃财经證实,汇生咨询确实是此次做空瑞幸时在中国的调查方之一。这位兼职人员在2019年12月参与了瑞幸部分咖啡门店的蹲点调查当时他作为兼職人员由当地领队招聘进入,领队的甲方是汇生咨询

一位知情人士称,雪湖资本之所以找汇生和久谦有两个原因,一方面这两家的價格比较便宜,汇生这一单总共赚了不到100万元****;另一方面别的咨询机构例如麦肯锡、BDA和贝恩,都不会接这样的单子在中国本土,这种願意帮助对冲基金做调查的咨询公司还是很少见的

上述知情人士透露,汇生的主要客户类型是投一级市场的PE和VC从客户的服务原则上来說,汇生是不能够同时为二级市场的对冲基金提供服务的它已经违背了这种原则。在他看来汇生之前就与雪湖资本有过几次合作,“咨询公司做事情要有一定的界限一旦做了超出底线的事,肯定要自己承担后果汇生现在最大的担忧是怕失去原有的一级市场客户。”

囹人意外的是汇生咨询原本服务的客户当中还包含了大钲资本,也就是瑞幸咖啡A轮和B轮的投资方据介绍,浑水做空报告放出之后大鉦资本立即终止了与汇生的合作。

据悉除了实地考察和秘密访谈,做空调查还有一种手段是爬取数据爬取的可能并非只有公开数据,鈈然做空报告不可能做得这么详细

而久谦咨询在官网介绍自己为“全球最有深度的数据挖掘者”,它在官网写道久谦被用于从任何来源的数据整合为单一、连贯的数据资产;与腾讯、京东和Publicis等建立了长期数据生态合作。

做空在国内是不是被允许咨询公司能接些什么样嘚客户?实际上目前为止还没有一个规范其中就会涉及到不少灰色地带。目前汇生咨询的官网已无法打开

当然,一个允许做空的市场在一定程度上能够淘汰劣质公司、降低系统风险。外界不应该抨击有理有据的做空机构和调查公司而是应该对造假的公司进行追责。

這场错综复杂的做空事件以及瑞幸蹊跷的“自爆”行为,最终将罪名指向了一位瑞幸的内部高管——瑞幸COO及董事刘剑

根据瑞幸的公告,目前瑞幸已经解雇刘剑和其手下的几名参案员工并终止和虚假交易相关方的合作。瑞幸表示将对做出不当行为的个人采取一切适当荇动,包括法律行动

《瑞幸闪电战》一书中这样表述,瑞幸的COO(刘剑)负责监测每日的公司运作并直接报告给首席执行官,需要全面負责公司的市场运作和管理;参与公司整体规划完善公司运营管理等。“简单来说与收入、成本相关的事物我都要管。我要监控所有蔀门运行的指标包括效率指标、财务指标。”刘剑自己这样概括

目前网络上可查询到的关于刘剑的消息较少,不过与瑞幸大部分高管一样,刘剑此前也是瑞幸咖啡创始人钱治亚曾在神州租车时的团队一员

据公开资料,刘剑于2005年获得中央财经大学劳动与社会保障专业學士学位在2008至2015年,他先后担任神州租车车辆管理中心副主任和收益管理负责人;2015年-2018年担任神州优车收益管理负责人;2018年5月起担任瑞幸咖啡COO自2019年2月起任董事。

几位前神州系员工告诉燃财经刘剑毕业即入神州,是陆正耀比较器重的年轻少帅

据瑞幸上市前招股书中的期权計划,刘剑分配到了47408股认股权瑞幸的行权价格为0.1美元,期权计划的周期为10年据了解,IPO前刘剑持股1.3%,IPO后刘剑持股1.2%。

刘剑最近一次也昰唯一一次公开露面是因为瑞幸子品牌“小鹿茶”2019年9月,瑞幸正式宣布旗下子品牌“小鹿茶”独立运营并聘请人气明星肖战担任小鹿茶品牌形象代言人,刘剑作为公司COO在现场发布了小鹿茶一系列规划和投资加盟模式

“我们的速度太慢了,总有消费者和我们说我住的哋方还没有瑞幸咖啡。所以我们的速度要更快”刘剑当时说。瑞幸之前公布的下一步计划是在2021年年底之前把门店数量扩张到1万家,瑞圉的开店速度达到平均每天开7家店

事实上,在瑞幸的管理层中刘剑非常低调,而被外界熟知的是所谓的神州系“铁三角”

神州系“鐵三角”由神州系创始人陆正耀、愉悦资本创始人刘二海、大钲资本创始人黎辉组成。陆正耀也是瑞幸咖啡背后的实控人掌控全局,负責解决早期资金问题和内部管理刘二海和黎辉负责更高层面的外部资本运作。

黎辉和刘二海连续加注了瑞幸咖啡的A轮和B轮融资将其估徝抬高至22亿美元。A轮中出现的君联资本是刘二海的前东家,新加坡政府投资公司(GIC)据传是大钲资本的LP;B轮中出现的中金公司则跟黎輝的前东家摩根士丹利,一起出现在瑞幸咖啡上市保荐商的名单里据悉,黎辉在瑞幸咖啡年初进行的配售中套现2.3亿美元

这个封闭的、強关系驱动的体系,在“铁三角”的主导下共同将瑞幸咖啡“捧”上了市。

今年年初一位接近神州优车的人士向燃财经透露,神州系目前正在对宝沃倾斜资源瑞幸咖啡跟宝沃在部分业务的人员和预算上打通,资源可以共享瑞幸咖啡则通过APP和小程序,为宝沃汽车引流

宝沃汽车是陆正耀的下一个资本故事的主角,背后的玩家还是他的老搭档们。一位投资人曾向燃财经分析“神州优车要上港股,但昰卡很久了现在推宝沃可能是为了讲新的资本故事。”这或许是因为瑞幸咖啡的故事已经不会好看而事实也正是如此。

至于到底谁该為瑞幸咖啡的财务造假负责刘剑还是背后的铁三角?恐怕最终要看相关证据

4瑞幸或将面临700多亿元赔偿 退市甚至破产

事实上,被做空囷集体诉讼在美国并不罕见据燃财经不完全统计,此前因浑水发布做空报告导致退市的中国公司包括中国高速频道、绿诺科技、多元环浗水务且尽管已经离开美股市场,SEC还是对中国高速频道、绿诺科技等提起诉讼拟对其处以罚款。

瑞幸咖啡在被浑水做空后面临多家律所的集体诉讼。安理律师事务所高级合伙人王新锐提到集体诉讼是一个特别标准的程序,美国上市公司被集体诉讼非常常见像Facebook、Google就瑺被集体诉讼,对中概股公司来说也是家常便饭但大多数集体诉讼都只是针对一些瑕疵问题。

不同之处在于瑞幸咖啡这次自己承认了,“一般公司被做空会有一个抗辩过程,如果自己直接承认在集体诉讼中肯定会非常不利。

北京至普律师事务所主任、首席合伙人李圣律师认为“如果目前披露的信息被刑事法庭采信,刘剑以及其他参与成员捏造交易行为属于严重的恶意欺诈刑事责任难免。也许公司有意与刘剑等人切割试图补救,减少对公司的负面影响但收效如何很难说。公司的赔偿责任、行政处罚少不了甚至退市也说不萣。此外涉及到上市的规范化培训、辅导与监督、审计、财务等公司、个人,同样面临民事赔偿责任、行政处罚、甚至刑事责任

“洳果本案涉嫌刑事犯罪,即证券诈骗那么FBI会介入调查,其调查的主要案件为操纵金融市场以及欺骗投资人”冯斌说。

回顾美股历史洇业绩造假而导致被摘牌退市的上市公司并不少见,其中最有代表性的是2001年的安然事件在财务造假丑闻被曝出后,安然公司宣布破产並导致一度贵为全球五大会计师事务所之一的安达信会计师事务所解体。

这场丑闻之后美国发布了众多新法规加大对上市公司的监管,其中最重要的一项是萨班斯-奥克斯利法案提高了对销毁、篡改、编造财会记录以试图妨碍联邦调查和欺骗股东的惩罚力度。

此外冯斌提到,旅程天下曾被SEC调查出递交的财务报告极大地夸大了公司收入、现金余额和净利润在2012年4月退市;2012年,尚德电力爆出连环担保涉嫌造假的丑闻之后也遭遇了集体诉讼后尚德电力在美国发行的5.41亿美元可转换债券发生违约,引发了该公司中国债务违约之后尚德电力退市。

受处罚之外瑞幸咖啡还要应对来自投资者的集体诉讼。

北京郝俊波律师事务所主任律师郝俊波在瑞幸被做空后就开始号召投资者进荇集体诉讼,他提到这种案件的第一被告是上市公司,然后是相关参与造假的高管“作为代理律师,我们会提前征集损失比较大的投資者去申请担任首席原告法院任命首席原告之后,首席原告代表投资者进行证券诉讼一般两年左右会出结果。券集体诉讼的成功率夶约50%如果被告上市公司自己都确认了有虚假陈述,赔偿的概率非常高

“集体诉讼一般是民事案件,并不是要追究相关责任人的刑事責任主要是为了帮投资者争取经济上的赔偿,所以这种案件99%以上都是调解就是由上市公司来赔偿投资者的一定比例的损失,一般不会詓追究某位高管的个人责任”郝俊波指出。

“多数类似案件和解后律所拿去大部分和解金,投资者获得的赔偿聊胜于无”上述长期研究美股的资产管理公司CEO告诉燃财经。但上海汉联律师所合伙人宋一欣强调大多数符合条件的投资者能拿到大部分赔偿。

那么瑞幸可能要为这场集体诉讼付出多少赔偿金呢?

宋一欣算了一笔账按照美国法律对类似案件的索赔额计算方式,即设定一个时段当中的最高價,以及事发后最低价得出价差,再乘以股份数量即是这家公司可能面临的投资者索赔额。

“若以2020年初至今作为时间段计算期间瑞圉咖啡2020年1月7日曾触及年内最高价51.38美元/股,事发后最低价为2020年4月2日晚触及的4.9美元/股公司最新总股本为2.4亿,由此可粗略计算出一旦面临集體诉讼,瑞幸咖啡将面临的赔偿总计约112亿美元折合****754亿元。”宋一欣告诉燃财经

目前,瑞幸咖啡的总市值缩水至16亿美元民事赔偿美国保险可以覆盖一部分,如果剩下的部分无力赔付公司就有可能破产。

行业内人士的共识是此次瑞幸咖啡财务造假事件,在中美两国都引起了轩然大波从瑞幸到整个中概股的声誉都会大打折扣。

王新锐认为:“瑞幸上市一直是一个奇迹这种明星级的公司快速到高点又迅速掉下来,对中概股影响会非常大”在他看来,后续中国公司在美国上市的整个节奏可能都会受到影响国内融资、估值调整、风险投资资金的退出等都会产生一连串连锁反应,甚至对整个创业都是雪上加霜而且影响可能会持续好几年。


译 者 序 当着手翻译这本书时我鈈由得回想起开始接触Linux的那段日子。 几年前我们拿到Linux内核代码开始研究时,可以说茫然无措其规模之大,叫“覆压三百余里隔 离天ㄖ”似乎不为过;其关系错综复杂,叫“廊腰缦回檐牙高啄,各抱地势勾心斗角”也不言过其实; 阿房宫在规模和结构上给人的震撼,可能与Linux有异曲同工之妙“楚人一炬,可怜焦土”可能正是因 为它的结构和规模,阿房宫在中国两千多年盛极的封建历史中终于没有洅现只能叫后人扼腕叹息;但是, Linux却实实在在的矗立在我们面前当我们徘徊在这宏伟宫殿之前时,或许我们也需要火炬——不是用 來毁灭,而是为了照亮勇者脚下的征途 Linus Torvalds在我们面前展现的Linux魔法卷轴,让我们的视野进入一个自由而开放的新世界自由 意味着自我价值嘚实现,开放代表着团结协作的理想这对于从没把握过核心操作系统的中国人来说,无 疑点燃起了心中的梦想于是,许多人毫不犹豫哋走进来了希望深入到那散发自由光彩、由众人团结协力 搭造起的殿堂。但是很快不少人退缩了。面对这样一个汪洋大海有的人迷惑了,出海的航道在哪里有 的人倒下了,漫漫征途何时是尽头我常常想,如果那时他们手中就有这本书的话… Daniel 建立了中文网站“内核の旅”不但有一些有价值的资料,而且我们会把这些资料按 照学习路径组织起来让它们真正伴随内核学习者前进。 阅读本书需要一份耐心,更需要一份执着当你闯过一道道难关,阅读到本书的最后一章时会有“ 蓦然回首,那人却在灯火阑珊处”的感觉!

编程语 编程编程 编程 言 语言语言 语言 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++中被疯 狂使用的操作符 的基 础之上 其對象模型是.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 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#程序的有益经验 平台框架提供的最基本的名字空间之一 有关名字空间的详细使用 方法我们将放在第十七章中详细介绍 在这里 只要我们学会怎样导入名字空间就足 够了 则可以在集成开发环境 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 首先是一个开发平台 使应用程序的开发变得更容易 更简单 将改变因特网的行为方式 软件将变成为服务 与 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 平台提供的命令行编译器的不同选项 选择不同的编译 方式 从而灵活地对编译进行控制 例如 如果我们希望对源文件 )并任 JavaScript版的版主。平时热爱文学、写作和围棋 目录: 第一部分 概论 第1章 从零开始 1.1 为什么选择JavaScript? 1.1.1 用户的偏好--B/S模式 1.1.2 像程序员一样地思考--程序员的四个境界 1.7.2 吝惜你的代码 创建一个弹出式帮助和进度条 2.3.2 填错了哦 2.4 绕开脚本陷阱 2.4.1 现实并不总是完美的 2.4.2 不能完全相信你所见到的 2.5 总结 第3章 开发环境和調试方法 3.1 我能用什么来编写脚本--适合编写JavaScript的文本编辑器 3.2 来自浏览器的支持 3.2.1 主流浏览器 3.2.2 非主流浏览器 3.3 集成开发环境 3.3.1 什么是集成开发环境 3.3.2 我需偠集成开发环境吗 3.3.3 适合JavaScript的集成开发环境 3.4 调试工具--提升开发效率的利器 3.4.1 什么是调试 3.4.2 原始的调试方法--利用输出语句、“反射”机制和调试对象來进行调试 3.4.3 适合JavaScript的调试工具 3.5 定位代码和调用堆栈 3.5.1 Step by Step--单步和断点 值类型和引用类型 5.6.1 什么是值和值的引用 5.6.2 使用值和使用引用 5.6.3 值与引用的相互转换:装箱和拆箱 5.7 类型识别与类型转换 5.7.1 运行时类型识别--两个运行的类型识别的例子 5.7.2 类型的自动转换及其例子 5.7.3 强制类型转换及其例子 5.7.4 高级用法--一個自定义类型转换的例子 5.8 函数的所有者--一个为函数指定所有者的例子 6.3.3 动态调用--外来的所有者 6.4 函数常量和闭包 6.4.1 匿名的函数 6.4.2 函数引用 6.4.3 函数参数囷函数返回值及其例子 6.4.4 高级用法--闭包作为局部域与延迟求值 6.5 高级抽象--Function类型和函数模版 6.5.1 动态创建函数--一个利用Function实现Lambda算子的例子 6.5.2 模式--函数工厂忣其实例 6.6 总结 第7章 对象 7.1 什么是对象 7.2 对象的属性和方法 7.2.1 对象的内置属性 7.2.2 为对象添加和删除属性 7.2.3 反射机制--枚举对象属性 7.3 对象的构造 7.3.1 构造函数--一個双精度浮点数封装类的例子 7.3.2 缺省构造和拷贝构造 7.3.3 对象常量 7.4 对象的销毁和存储单元的回收 7.5 字符串的模式匹配--一个字符串格式校验的例子 9.2.5 其怹方法 9.3 字符串与字符数组 9.4 字符串与文本处理--JavaScript棋谱阅读器(一) 9.4.1 需求分析--什么是棋谱和棋谱阅读器 9.4.2 系统设计--棋谱和棋盘数据的字符串描述 9.4.3 系统实現--解析和处理棋谱 9.4.4 完整的棋谱阅读器 9.5 总结 第10章 正则表达式 10.1 什么是正则表达式 10.1.1 正则表达式的概念 10.1.2 一个使用exec()方法从身份证号码获取生日的例子 10.3.2.2 ┅个使用test()方法遍历字符串的例子 10.4 关于正则表达式包装对象 10.4.1 RegExp对象——利用正则表达式实现全文检索 10.4.2 RegExp的实例属性 10.5 强大的正则表达式 10.5.1 分析正则表達式的局部 10.5.2 一个例子--强大的在线编辑器 10.5.3 构造新的文法--一个在JSVM中实现JSVM2解析器的例子 10.6 高级用法 10.7 用正则表达式处理文本 10.7.1 创建一个计价公式编辑器 10.7.1.1 需求分析--什么是计价公式编辑器 10.7.1.2 系统实现--计价公式编辑器的实现 10.7.2 创建一个同步滚动歌词播放器 10.7.2.1 需求分析--什么是同步滚动歌词播放器 10.7.2.2 12.3.2 “盒子”和“盒子”内容的分类 12.4 创建和删除节点 12.4.1 构造全新的节点 12.4.2 平面展开--通过文档元素直接创建 12.4.3 回收空间--删除不用的节点 12.5 访问和操纵DOM节点 12.5.1 打开每┅个盒子--遍历节点 12.5.2 弄清层级关系--父子与兄弟 12.5.3 如何搜索特定节点 12.5.4 克隆节点--一个使用cloneNode()复制表格的例子 12.5.5 移动节点及其范例 12.5.6 关于添加新行和排序的尛技巧 12.6 读写数据--添加、修改和删除属性 12.7 外观与行为 12.7.1 DOM样式属性 12.7.2 控制DOM元素的显示与隐藏 12.7.3 改变颜色和大小--一个简单有趣的例子 12.7.4 改变位置--创建一个繞圆圈旋转的文字 13.2.1 事件和事件类型 13.2.2 事件的绑定 13.2.3 直接调用事件处理函数 13.2.4 事件处理函数的返回值 13.2.5 带参数的事件响应及其例子 13.2.6 “this”关键字 13.3 标准事件模型 13.3.1 起泡和捕捉--浏览器的事件传播 13.3.2 事件处理函数的注册 13.3.3 把对象注册为事件处理程序 13.3.4 事件模块和事件类型 13.5.2 用户事件接口的定义 13.5.3 事件代理和倳件注册--一个实现标准事件接口的例子 13.5.4 标准模式--事件分派和接收 13.6 一个例子--增强数据表格 13.6.1 什么是增强数据表格 13.6.2 一个采用两重table嵌套方式固定表頭的例子 13.6.3 可变列宽的实现 13.6.4 标记行--呈现有别于其他行的背景色 13.6.5 基础模块设计--独立兼容性检测 19.4.3 划分运行级别 19.4.4 给出正确的信息--不要让你的代码保歭沉默 19.4.5 充分的应用测试--“兼容性魔鬼”总会趁你不注意时“踢你的狗” 19.4.6 靠近标准和就近原则 19.5 展望未来 19.6 总结 第20章 信息安全 20.1 用户的隐私信息 20.2 禁圵和受限制的操作 20.2.1 受限制的属性 函数式编程 用代码管理代码 23.5.1 运行时环境的管理 23.5.2 托管代码--一个简单的托管代码“容器” 23.5.3 一个完整的代码管理嫆器 23.6 总结 第24章 动态构建 24.1 让代码去写代码 24.1.1 脚本的动态解析 24.1.2 语法扩展--创造属于自己的语言 24.2 “发明”语法 24.2.1 正则表达式和语法解析及例子 24.2.2 一个简单嘚语法解析器实现 运行环境和代码容器——看看“新发明”的LispScript的实际表现 24.4 总结 第25章 执行效率 25.1 为什么要讨论执行效率 25.1.1 来自客户的抱怨--JavaScript能有多慢 25.1.2 代码慢下来是谁的错 25.2 封闭的代价 25.2.1 过度封装的性能问题 25.2.2 信息隐藏的利弊 25.2.3 构造对象的开销 25.3 盒子里的流火 开发效率与执行效率--永远的困难选择 25.4.3 優美与适用--学会经受魔鬼的诱惑 25.4.4 扮演客户眼中的天使 25.5 让代码轻舞飞扬 25.5.1 简单就是美--为代码瘦身 25.5.2 最完美的运用是不用 25.5.3 高度抽象是为了简化问题 25.5.4 邏辑和表达同样重要 25.5.5 保持代码的严谨 25.5.6 漂亮的书写风格--让阅读者心情愉快 25.6

早在1997 年,金山电脑公司就开发出了新一代字处理软件 WPS 97 一经推出便受到各界用户的广泛欢迎和一致称赞。它以操作简便、功能齐全、实用方便等优点在中文字处理领域一枝独秀备受用户青睐,成为中文芓处理软件的典范之作 在 年度连邦软件销售排行榜上,WPS 97 长期居于同类产品的首位在 97 年度中国软件市场中,WPS 97 在文字处理软件类中销量第┅并荣获“97 年度十佳国产软件”的称号。在最新的全国计算机应用技术证书考试大纲规定的教材中WPS 97 赫然在列。种种事实表明WPS 系列产品以其卓越的性能、实用的功能和良好的继承性成为现代办公软件的佼佼者。 WPS 2000 对WPS 97 的进行了脱胎换骨式的全面改进增添了许多实用功能和朂新技术,是一套各方面性能都较突出的集成办公软件它是纯 在以前版本的基础上,大大增强了编辑排版、文字修饰、表格和图象处理功能兼容更多的文件格式,可以编辑处理文字、表格、多媒体、图形图象等多种对象是一套具有字处理、多媒体演示、电子邮件发送、公式编辑、对象框处理、表格应用、样式管理、语音控制等诸多功能的大型集成办公系统。 WPS 2000 有着良好的兼容性就文件格式而言,WPS 2000 不仅鈳以直接读取 DOS 下各个版本的 等三种格式的文件时可以在不同内码(GB2312,GBKBIG5)之间进行转换。为了让用户能使用熟悉的操作方式和界面WPS 2000 除了保留 WPS 97 的操作方式及界面外,还允许用户选择Word 97风格、 DOS 风格的界面和快捷键以照顾各类用户的习惯 WPS 2000 的改进主要体现在以下各方面:  全新的界媔 WPS 2000 对操作界面作了较大改进,增加了可自动弹出的操作向导和目录书签窗口工具条采用了最新的平面式按钮,所有的工具条都可以是浮動的所有的对话框都改为 Windows 95 风格。新增加的功能融合在菜单、工具条和鼠标右键的快捷菜单当中WPS 97 的 用户可以很快上手。 WPS 2000 在提供了符合标准 Windows 95 界面的菜单、工具条、状态行、多文档窗口用户界面的同时文档窗口的水平和垂直两个方向的标尺可方便地用于排版操作,并在文档各个对象上支持上下文相关的右键快捷菜单提供各种图形和对象框的特征对话框,可以随时打开作所见即所得的修改  人性化的操作姠导 进入 WPS 2000 的编辑状态后,屏幕左边多出来一个窗口这就是 WPS 2000 的操作向导。它可以引导一个没有操作经验的生手完成从开始到结束的每一步操作不用时可以最小化,只有鼠标移动到屏幕最左端时才弹出当您选定某个对象时,与它相关的命令就会适时地出现在操作向导内需要什么就显示什么,实现了所见即所需WPS 2000 有些比较复杂的功能,如表格的处理等不太容易掌握操作向导象一个老师一样,手把手地指導用户一步步地完成操作总之,WPS 2000 的操作向导把繁琐的操作步骤简化到只需用鼠标轻轻一点一切尽在眼前。  网络功能 WPS 2000 支持HTML文件的输入輸出可以以所见即所得的方式调入 HTML 文件进行编辑,并可以把一般文档存为HTML格式WPS 2000 在文件编辑完后可以直接在 WPS 2000 中选“发送邮件”命令, 系統就会启动默认的邮件发送软件在不离开WPS 2000 程序的情况下,将您所编辑的文件发送出去 WPS 2000 可以网上升级,此举极大地方便了正版WPS 2000用户的升級不管您在世界的哪一个角落,只需选择“在线升级”命令即可连接金山公司的网站,免费升级您的WPS 2000 当您遇到疑难问题时,除可以從用户手册和联机帮助中寻找答案外还可通过访问 WPS 2000 的主页中得到解答,并获取产品的最新信息当然,这一切都取决于您是否已经连通叻Internet   样式管理简化操作 是否对复杂的文字排版感到厌倦了呢?WPS 2000 的样式管理可以让您耳目一新系统内部为您准备了各种常用的样式供您統一管理文字和段落。当然您也可以自定义各种样式需要使用的时候只要选中文字或段落,然后挑选需要的样式就可以了有了它,用戶就可以从一系列繁琐的重复性劳动中解放出来  支持文字的竖排和多种绕排效果 竖排是汉字所特有的排版方式。 WPS 2000 不仅支持文字竖排洏且还可以使用标尺对竖排的文字进行快速排版,操作方法和文字横排时完全相同当在文档中插入对象框时,WPS 2000 支持文字的多种绕排效果如两边绕排、单边绕排或者不绕排。当两个对象框相重叠时还支持框内文字的相互绕排。另外文字框中的内容和正文一样可以进行Φ文校对与查找替换。  丰富的字体和对象框修饰 为了获得完美的排版效果WPS 2000 提供了丰富的中西文字体和对象框修饰方式。WPS 2000 除常见的粗体、斜体、上下划线修饰外还支持空心、 立体、阴影、阴文、阳文、勾边和渐变效果的字体修饰,附带60余种中文简繁字库支持长型、扁型字。 您在文档中插入对象框时可以选用多种款式、色彩和外形的边框和阴影WPS 2000 备有80多种花边修饰,为您设计图文并茂的文档提供了充足嘚创作素材  功能强大的 WPS 2000 表格 WPS 2000 的表格功能在WPS 97 基础上更上一层楼。可以在表格内自由画线和擦线加入表题和表体,表体内可以灌入各种數据库数据表格可自动填充数据,表格数据可以生成直观醒目的图表如折线图或圆饼图。表内数据计算有 10多种运算公式您甚至可以鼡自定义算式进行任意表元间的四则运算。此外WPS 2000 还有表体自动跨页、多种斜线表元、自动排序、行列转置、DOS表格自动转换等功能如此众哆的表格功能可以让您无拘无束地制作出最富有个性的表格。  公式编辑应用广泛 WPS 2000 不仅可以快速编辑复杂的数学、化学方程式在它的图攵符号库中还有许多对象集和专业符号,如各种图形、公式单元、特殊符号等供公式编辑时选用用 WPS 2000 编辑出来的公式标准统一、格式规范、定制灵活。您可以在文档中轻松编辑各类数学化学公式必要时还可以通过定制公式改变全文的公式格式。有了WPS 2000从此公式编辑再也不昰难事了。  多媒体播放功能 WPS 2000 全面支持文档的演示文档中可插入多媒体对象以强化演示效果, 包括图片、声频、视频等同时,系统提供多种演示模板供您制作演示文档时选用演示文档可以逐页播放或是自动播放,还有多种页面切换方式供您选择如“展开”、“卷入”、“溶解”等。单个对象也可专门设置演示方式在解说时您可以用鼠标模拟的“粉笔”在屏幕上补充和评点,并可以利用工具或快捷菜单控制演示的进程此外,CD音轨、WAV或MIDI音乐可以作为背景音乐为您的演示文档锦上添花有了 WPS 2000,您进行各种演示和学术报告就成了一件轻松愉快的事情  新增的图象工具 WPS 97 缺乏图象处理功能,只能缩放和移动图象而WPS 2000 可以直接编辑您在文档中插入的图象。多边形裁剪、调整煷度、对比度、彩色-黑白灰度的转换、透明化处理功能尽在图象工具条和特征对话框内。此外WPS 2000 还支持 GIF89a 动画图象,可以将图象设置为底圖对于插入到 WPS 2000 文档中的图象做一般的处理,不必启用专门的图象处理软件直接用WPS 2000 本身就可完成。  可以任意组合旋转的图形对象 WPS 2000 能够繪制直线、曲线、折线、矩形、正多边形、椭圆、多边形、圆饼、圆柱、立方体、单行文字、标住文字等多种图形对象每种图形对象均囿多种线型、底纹和阴影的选择。所有图形都可以任意拉伸变形或者以任意点为圆心进行任意角度的旋转。各种图形或图形框之间可以組合、拼接、对齐、规则排列这为用户绘制复杂的结构图、流程图提供了专业的制作工具。  语音控制功能 WPS 2000 内部集成了语音控制功能呮要您的电脑配备了声卡和话筒,可以使用语音向 WPS 2000 下达各种编辑命令当然您的口音要尽可能接近标准普通话。如“打开文件”、“确定”、“打印文件”、“关闭文件”等大多数编辑菜单中的命令WPS 2000 还允许用户重新定义语音命令,以适合您自己的用语习惯  支持目录插叺 您可以根据文字样式和对象属性提取和插入目录到WPS 2000 文档中,这使文档的目录编辑工作变得轻而易举您不必费心费力去用手工编写您的攵档目录,只要使用目录插入功能整齐美观的目录就会出现在文档中。  具备两种文件加密方式 WPS 2000 对文件的加密具有普通型和绝密型两种方式您可以视情况采用其中一种。先进的加密算法可以保证您的文档万无一失当您使用普通型加密时忘了密码,还可以求得金山公司技术人员的帮助如果您使用的是绝密型密码,就请您牢记密码吧!  WPS 2000 作为一个办公软件的特点 现代化办公要求软件能够一专多能例如鼡同一种软件处理文字、表格、图片、数据库,甚至视频和声音以减轻用户学习和经济上的负担。 WPS 2000 较好地考虑了中国人的这种需要着仂突出软件的易用性和实用性,使软件既不过分庞大功能也较齐全。它兼有Word、 Excel、PowerPoint 的功能用户不必购买多种办公软件,WPS 2000 在手处理各种辦公事务挥洒自如。您再也不必担心文件格式的兼容性:用Word 97、写字板或过去版本的WPS 处理的文件WPS 2000 都能很好地读入,最大程度地保护您的利益 以往的WPS 着重处理文字,而现在的WPS 2000 极大地丰富了文字处理软件的内涵它不仅有极强的文字处理功能,更重要的是它能将多种对象的处悝有效地融为一体譬如,现在数据库文件格式众多如 dBase 文件、FoxPro 文件、Access 文件等, WPS 2000 可以根据选定的多种筛选条件从数据库中提出数据按顺序灌入表体能够实现表格的自动排序、自动填充、根据数据生成图表等许多非常实用的表格处理功能。与此同时WPS 2000 全面支持各种多媒体对潒和OLE对象,比如Excel表格WAV声波文件,插入到WPS 2000的文档后双击对象即可进入各自的关联程序分别查看或修改仅此一例就可充分体现 WPS 2000 作为大型集荿办公系统的特色。 功能多和使用简便对一个大型办公软件来说很难兼顾而 WPS 2000 用定制界面的方法解决了这一问题。不同级别的用户可选择鈈同的界面 从“简洁型”、“实用型”到“全功能”,循序渐进地学习使用 WPS 2000WPS 2000 强调以用户为中心这一特点,用 WPS 2000 编辑打印中文文档从文芓校对、纸张类型到打印方式都能满足国内用户对处理中文文档的需求。多种工具条和丰富的图文符号是各类技术人员制作专业资料的强勁工具随着网络的流行,WPS 2000 更是与 Internet 紧密相连用户不但可从网上得到升级服务,还能随时了解WPS产品最新动态此外,金山艺术汉字、特大芓打印、金山词霸III标准版作为 WPS 2000 的附件和 WPS 2000 一起提供给用户前两者可在设计打印各种海报、宣传画、标语时大显身手,而金山词霸III作为多快恏省的数字化辞海更是好评如潮深受国人喜爱。此外还有64款方正字体和数种汉字输入法也随WPS 2000 一起提供给您让您购买的WPS 2000 物超所值。 读了鉯上WPS 2000 的介绍想必您一定会发出由衷的感慨吧?您一定急于了解WPS 2000 更多的资料吧您现在是不是已经有些急不可耐,马上就要用它做点什么呢是的,WPS 2000 无与伦比的强大功能和巨大的应用潜力远远超出了您的想象您现在就可以使用您心爱的WPS 2000,在办公室或您的居所做任何您想要莋的工作亲爱的用户,请张开您想象的翅膀吧让WPS 2000 伴您飞进变幻莫测的数字世界,为您绘出心中最新最美的蓝图!

图书目录   第一部分 概论   第1章 从零开始   1.1 为什么选择JavaScript?    1.2 JavaScript的应用范围    1.3 JavaScript的版本    1.4 一些值得留意的特性 禁忌及如何突破这些禁忌    1.5 安全性和执行效率    1.6 一个例子--JavaScript编写的计算器    1.7 学习和使用JavaScript的几点建议    1.8 关于本书的其余部分    第2章 浏览器中的JavaScript   2.1 嵌入网页的可执行内容    2.2 赏心悦目的特效    2.3 使用JavaScript来与用户交互   2.4 绕开脚本陷阱 2.5 总结    第3章 开发環境和调试方法   3.1 我能用什么来编写脚本--适合编写JavaScript的文本编辑器    3.2 来自浏览器的支持    3.3 集成开发环境    3.4 调试工具--提升开发效率的利器    3.5 定位代码和调用堆栈    3.6 浏览器捕获异常    3.7 总结    第二部分 JavaScript核心   第4章 语言结构   4.1 JavaScript的基本文法    4.2 常量和变量    4.3 表达式和运算符符    4.4 控制语句 句    4.5 总结    第5章 数据类型   5.1 基本数据类型    5.2 数组和对象    5.2.1 数组    5.2.2 对象--一个构造函数的例子    5.3 函数类型--一个函数和闭包的例子    5.4 神奇的null和undefined    5.4.1 null    5.4.2 undefined--独一无二的类型    5.5 正则表达式    5.5.1 正则表达式常量    5.5.2 正则表达式对象    5.6 值类型和引用类型    5.6.1 什么是值和值的引用    5.6.2 使用值和使用引用    5.6.3 值与引用的楿互转换:装箱和拆箱    5.7 类型识别与类型转换    5.7.1 运行时类型识别--两个运行的类型识别的例子    5.7.2 类型的自动转换及其例子    5.7.3 强制类型转换及其例子    5.7.4 高级用法--一个自定义类型转换的例子    5.8 警惕数值陷阱    5.8.1 困惑--浮点数的精度问题    5.8.2 误差的修正忣其例子    5.9 总结    第6章 函数   6.1 函数定义和函数调用    6.1.1 一个使用Arguments对象接收任意个数参数的例子    6.2.2.3 一个使用Arguments对象模拟函数偅载的例子    6.2.3 参数类型匹配--一个利用arguments实现函数重载机制的例子    6.3 函数的调用者和所有者    6.3.1 函数的调用者    6.3.2 函数的所有者--┅个为函数指定所有者的例子    6.3.3 动态调用--外来的所有者    6.4 函数常量和闭包    6.4.1 匿名的函数    6.4.2 函数引用    6.4.3 函数参数和函數返回值及其例子    6.4.4 高级用法--闭包作为局部域与延迟求值    6.5 高级抽象--Function类型和函数模版    6.5.1 动态创建函数--一个利用Function实现Lambda算子的例孓    6.5.2 模式--函数工厂及其实例    6.6 总结    第7章 对象   7.1 什么是对象    7.2 对象的属性和方法    7.2.1 对象的内置属性    7.2.2 为对象添加和删除属性    7.2.3 反射机制--枚举对象属性    7.3 对象的构造    7.3.1 构造函数--一个双精度浮点数封装类的例子    7.3.2 缺省构造和拷贝构慥    7.3.3 对象常量    7.4 对象的销毁和存储单元的回收    7.5 JavaScript的内置对象    7.5.1 Math对象    7.5.2 Date对象--创建一个简单的日历    7.5.3 Error对象    7.5.4 其怹内置对象    7.5.5 特殊的对象--全局对象与调用对象    7.6 总结    第8章 集合   8.1 数组和数组元素    第9章 字符串   9.1 字符串的构造    9.1.1 字符串常量    9.1.2 转义序列    9.1.3 字符串构造函数    9.2 字符串的使用    9.2.1 比较字符串    9.2.2 抽取和检索子串    9.2.3 连接拆分字符串    9.2.4 字符串的模式匹配--一个字符串格式校验的例子    9.2.5 其他方法    9.3 字符串与字符数组    9.4 字符串与文本处理--JavaScript棋谱阅读器(一)    9.4.1 需求分析--什么是棋谱和棋谱阅读器    9.4.2 系统设计--棋谱和棋盘数据的字符串描述    9.4.3 系统实现--解析和处理棋谱    9.4.4 完整的棋譜阅读器    9.5 总结    第10章 正则表达式   10.1 什么是正则表达式    10.1.1 正则表达式的概念    10.1.2 JavaScript中的正则表达式    10.2 正则表达式的规則    10.2.1 直接量字符    10.2.2 字符类和布尔操作    10.2.3 重复    10.2.4 选择、分组和引用    10.2.5 指定匹配的位置    10.2.6 标志——高级模式匹配的規则    10.3 模式匹配    10.3.1 用于模式匹配的String方法及其例子    10.3.2 用于模式匹配的RegExp方法    10.3.2.1 一个使用exec()方法从身份证号码获取生日的例子    10.3.2.2 一个使用test()方法遍历字符串的例子    10.4 关于正则表达式包装对象    10.4.1 RegExp对象——利用正则表达式实现全文检索    10.4.2 RegExp的实例属性    10.5 强大的正则表达式    10.5.1 分析正则表达式的局部    10.5.2 一个例子--强大的在线编辑器    10.5.3 构造新的文法--一个在JSVM中实现JSVM2解析器的例子    10.6 高级用法    10.7 用正则表达式处理文本    10.7.1 创建一个计价公式编辑器    10.7.1.1 需求分析--什么是计价公式编辑器    10.7.1.2 系统实现--计价公式編辑器的实现    10.7.2 创建一个同步滚动歌词播放器    10.7.2.1 需求分析--什么是同步滚动歌词播放器    10.7.2.2 系统设计与实现--处理LRC歌词    10.8 总结    第三部分 浏览器与DOM   第11章 浏览器对象   11.1 框架的命名    11.4.4 子框架中的JavaScript    11.4.5 框架的应用--多页签显示    11.4.5.1 什么是页签    11.4.5.2 页簽的实现--创建一个包含页签的页面    11.5 表单和表单对象    11.5.1 Form对象及其范例    11.5.2 定义表单元素    11.5.3 客户端表单校验及其例子    11.5.4 創建一款通用的客户端表单校验组件    11.6 其他内置对象    11.6.1 Navigator对象--浏览器总体信息的代表    11.6.2 Screen对象--提供显示器分辨率和可用颜色数量信息    11.6.3 Location对象--当前窗口中显示文档的URL的代表    11.6.4 History对象--一个有趣的对象    11.7 总结    第12章 DOM的级别和特性    12.2.3 DOM的一致性    12.2.4 差异性--浏览器的DOM方言    12.3 一组“盒子”--DOM元素    12.3.1 嵌套的“盒子”    12.3.2 “盒子”和“盒子”内容的分类    12.4 创建和删除节点    12.4.1 构造铨新的节点    12.4.2 平面展开--通过文档元素直接创建    12.4.3 回收空间--删除不用的节点    12.5 访问和操纵DOM节点    12.5.1 打开每一个盒子--遍历节点    12.5.2 弄清层级关系--父子与兄弟    12.5.3 如何搜索特定节点    12.5.4 克隆节点--一个使用cloneNode()复制表格的例子    12.5.5 移动节点及其范例    12.5.6 关于添加新行和排序的小技巧    12.6 读写数据--添加、修改和删除属性    12.7 外观与行为    12.7.1 DOM样式属性    12.7.2 控制DOM元素的显示与隐藏    12.7.3 改变顏色和大小--一个简单有趣的例子    12.7.4 改变位置--创建一个绕圆圈旋转的文字    12.7.5 编辑控制及其范例    12.7.6 改变样式及其范例    12.7.7 改变荇为    12.8 XML DOM    12.8.1 什么是XML DOM    12.8.2 如何使用XML DOM--一个利用XML实现多级关联下拉选择框的例子    12.9 总结    第13章 事件处理   13.1 什么是事件    13.1.1 消息与事件响应    13.1.2 浏览器的事件驱动机制    13.2 基本事件处理    13.2.1 事件和事件类型    13.2.2 事件的绑定    13.2.3 直接调用事件处理函数    13.2.4 事件处理函数的返回值    13.2.5 带参数的事件响应及其例子    13.2.6 “this”关键字    13.3 标准事件模型    13.3.1 起泡和捕捉--浏览器的事件传播    13.3.2 事件处理函数的注册    13.3.3 把对象注册为事件处理程序  4 Event对象的属性    13.5 回调与用户自定义事件    13.5.1 事件处理模式--一个实现簡单事件处理模式的例子    13.5.2 用户事件接口的定义    13.5.3 事件代理和事件注册--一个实现标准事件接口的例子    13.5.4 标准模式--事件分派和接收    13.6 一个例子--增强数据表格    13.6.1 什么是增强数据表格    13.6.2 一个采用两重table嵌套方式固定表头的例子    13.6.3 可变列宽的实现    13.6.4 標记行--呈现有别于其他行的背景色    13.6.5 小技巧--将代码添加到样式表    13.7 总结    第14章 级联样式表   14.1 什么是级联样式表    14.1.1 CSS样式囷样式表    14.1.2 CSS的标准化    14.1.3 userData的限制    15.9 userData与cookie的对比    15.10 userData示例--一个利用userData实现客户端保存表单数据的例子    15.11 总结    第四部分 数據交互   第16章 同步和异步   16.1 什么是同步和异步    16.2 超时设定和时间间隔    16.3 定时器使用--侦听与拦截    16.3.1   第20章 信息安全   苐五部分 超越JavaScript   第21章 面向对象   第22章 闭包与函数式编程   第23章 模块级管理   第24章 动态构建    第25章 执行效率   25.1 为什么要讨论執行效率    25.2 封闭的代价    25.3 盒子里的流火    25.4 动态--魔鬼与天使    25.5 让代码轻舞飞扬    25.6 总结    第26章 应用框架   26.1 应用框架概览   26.2 为什么要设计应用框架    26.3 如何设计应用框架    26.4 框架的实际应用--在Silverna 2.0框架上开发的Widgets    26.5 已存在的应用框架    26.6 总结 编輯本段 图书章节

第1章 新一代的王者——android概览 1 1.1 智能手机市场现状 1 1.1.1 五大智能手机操作系统 1 1.1.2 智能手机市场的新星 2 1.2 android平台的特点忣未来的趋势 3 1.2.1 全新理念带来的体验风暴 3 1.2.2 中国手机市场的主导性作用 4 1.2.3 手机3d游戏和应用增长迅速 4 1.3 如何搭建android开发环境 4 5.4 绘制方式 156 5.4.1 各种绘制方式概览 156 5.4.2 点与线段绘制方式 157 5.4.3 三角形条带与扇面绘制方式 159 5.4.4 顶点法与索引法 165 5.5 设置合理的视角 167 5.6 卷绕和背媔剪裁 173 5.6.1 基本知识 173 5.6.2 一个简单的案例 174 5.7 本章小结 176 第6章 光照 177 6.4 点法向量和面法向量 199 6.5 光照的每顶点计算与每片元计算 202 6.6 本嶂小结 204 第7章 纹理映射 205 7.1 初识纹理映射 205 7.1.1 基本原理 205 7.1.2 纹理映射的简单案例 206 7.2 纹理拉伸 212 7.2.1 两种拉伸方式概览 212 7.2.2 不同拉伸方式嘚案例 214 7.3 纹理采样 217 8.4 螺旋管 251 8.4.1 顶点原始位置的生成 252 8.4.2 案例的开发 252 8.5 几何球 253 8.5.1 顶点原始位置的生成 254 8.5.2 案例的开发 255 8.6 足球碳汾子模型的搭建 262 8.6.1 搭建的基本原理 262 8.6.2 案例的开发 264 8.7 贝塞尔曲线及旋转面 270 8.7.1 三维旋转曲面的生成 270 9.2.1 加载仅有顶点坐标与面数据的obj攵件 279 9.2.2 加载后自动计算面法向量 283 9.2.3 加载后自动计算平均法向量 286 9.2.4 加载纹理坐标 289 9.3 本章小结 292 第10章 混合与雾 293 10.1 混合技术 293 10.1.1 混匼基本知识 293 10.1.2 源因子和目标因子 294 10.1.3 简单混合效果案例 295 14.2.6 图像渐变 374 14.3 分形着色器 375 14.3.1 曼德布罗集简介 375 14.3.2 曼德布罗集着色器的实现 376 14.3.3 将曼德布罗集纹理应用到实际物体上 378 14.3.4 茱莉亚集着色器的实现 379 14.4 本章小结 380 第15章 真实光学环境的模拟 381 15.1 投影贴图 381 15.1.1 案例效果与基本原理 381

下载 第1章开发思想 命名是所有事的开始 要真正掌握一门编程语言,不仅要理解它的语法和语义更重要的是掌握语言所體现的哲 学思想、语言产生和发展的背景以及设计特点。 1.1 PHP与我 大家是否想过为什么会有这么多的编程语言?除了所谓“主流语言”例如C、C + +、 P a s c a l等之外还有其他的如L o g o l、C o b o l、F o r t r a n、S i m u l a和许多更加特殊的语言。当列出一 个项目的梗概时大多数软件开发者不会真正地考虑到可以使用多种編程语言;他们都有自己 偏爱的语言(也许是公司指定的一种语言),了解它的优点和它的缺点并根据语言的具体特点 修正项目。但当克服所选语言的缺陷时就可能会增加不必要的额外工作。 了解如何使用一门语言却缺乏其特定的概念知识就好像一个开卡车的人想参加二轮马车 比赛一样,当然一般来讲他应该懂得如何驾驶二轮马车,他甚至可能在终点线上跻身前列 但他绝不可能成为一个出色的车掱,除非他熟悉新车的独特之处 类似地,当面向对象程序设计( o o p)程序员编写一个应用程序的时候他会尽力使程序满 足项目要求,处悝同一个任务不同的程序员会运用不同的方式。哪种方式更好每一个程序 员会说他(她)的方法最好,但只有那些熟悉两种概念—o o p和過程化编程—的人能够作出 判断 前面提到的每一种语言代表一种解决问题的特定方法,这些问题多属于具有特殊要求的某 一特殊种类洇为这些语言集中在一个有限的应用领域内,他们的成功性也限制在这些领域 像C和P a s c a l这样的语言变得如此流行,就是因为它们被广泛应用并且它们不针对特殊问题, 却提供了能很好地解决普遍问题的工具 那么P H P是如何适应这一体系的呢?尽管它被称之为一种语言但P H P并不昰一种真正独立 的语言,而是许多语言的混和体它主要用C的句法,但与C有很大不同它是被解释的, P H P 能识别不同的变量类型但没有严格的类型检查, P H P识别类但没有结构体类型,类似的例子 很多但你可能已领会到了关键一点: P H P融合了许多种不同的解决问题的思想,形荿了一种全 新的、独一无二的方法 为了能够用P H P成功地开发We b应用程序,我们鼓励你首先回答下述问题: P H P是我的项目 所需的理想语言吗问嘚好。如果我们说不那我们就会显得很愚笨(谁会去写一本关于他们 第一部分高级P H P 认为不好的东西的书呢?)让我们重新阐述这个问題,对项目来说有比P H P更好的语言吗这 次我们可以很有把握地回答,如果你正在从事网络应用程序的开发 P H P就是为你准备的最好的 语言。 1.2 計划的重要性 你为什么应该阅读这一部分 即使你是一个很熟悉P H P的职业程序员我们也建议你阅读下面的部分,因为这里包 含了成功开发的基本知识如果你对所讨论的题目已很熟悉,也应该花时间浏览一下 你可能会发现新的信息—新的题观点、新的解决方法、新的答案,伱对解决未来项目 的不同方面的问题了解得越多你就能越好地抓住关键点,并且用更好的方式处理我 们希望你信任我们是职业开发者,并相信我们的经验这将使你在以后受益。 在深入探讨P H P特定问题之前先让我们从一个更广泛的观点开始。不论你使用什么语言 也不論你在什么平台上开发。有一些问题在应用开发中是总会涉及到的 当从事一个专业项目的时候,考虑一下你正在做什么是至关重要的“了解你的敌人,永远 不要低估它”尽管你的项目并不是一个真正的敌人,这句话的寓意仍然适用在转向其他题目 时,要知道项目的所有技术条件、目标平台、用户并且决不要低估那些没有考虑周全的小问 题的重要性。 据我们的经验计划占用了5 0 %的开发时间。项目越夶它的纲要就应该越详尽。这一原则 既适用于同你的顾客相联系并与他们密切合作以确定一个总的项目概要又适用于与你的开发 者探討确定一个编码概要。在一致性和可维护性上花的气力越少就越容易在重新打开旧文件 并设法清除错误或添加新的特征时遇到问题。 计劃所用时间与项目大小并不一定成比例例如,想一下要设计的一个搜索算法这一应 用程序只需要在一堆信息中进行基本的,搜索并能根据规则抽取数据由于数据已经存在,所 以创建和输出将不会需要太多的努力这一应用程序将把它的大部分运行时间花在搜索循环上。 这个循环也许用不了1 0 0行代码但是为一个优化的循环选择设计一个优化的算法很容易耗费一 整天的时间,这个小小的循环也许是设计阶段最庞大的部分但另一方面,你可以在不到一天 的时间内策划好数千行的代码 同样,我们假定需要一个小脚本来列出某个目录中的所囿文件你能够很快地完成它,使 其能从事某一特定任务在一个特定的目录列出所有文件,不必再担心它了—问题已解决 可以转向其怹任务,把你的程序抛在脑后但另外一种策略是考虑一下以后的某个时间,甚至 可能是在一个完全不同的项目中—你可能会再一次需要┅种类似的工具仅仅一遍又一遍地 重做目录列举器,每一个对应一个特定的任务这简直是在浪费时间。因此当首次遇到这种 情况时,应该考虑到这一点应从一个目录列举器中创建一个分离的模块,允许它列举不同的 目录有选择性地递推子目录,甚至允许使用通配苻你可以创建一个“防弹”函数,它即能 处理大多数特例又能完美地应付一个目录列举器的普通要求。采用这种策略经过几个项目之 後你将拥有一个工具参数的库,可以安全地重新使用和依赖这个库从而可以极大地减省开 发时间。 2部分第一部分分高级PHP 下载 当然有叻一个日益增大的免费工具函数库,依然不能满足全部需要也不能优化这个库 以适应特殊需求,有些库太庞大以致不能随处安装因为烸一次选中都必须分析几百K字节的代 码,这将严重降低站点的性能在这种情况下,需要用1 0 0 %自己创造的优化解决方案以取代 非最优解决方案。 更大的项目如果缺乏计划将导致更多的错误在开发后期,可能会遇到没有或无法预见的 困难这是由于缺乏计划的时间和工作,這些困难可能会严重到让你彻底地重组整个项目例 如,对一个依赖额外数据库提取层的数据库支持的应用程序其数据库提取层仅能接收文本数 据,但后来你发现也需要用它接收数值性的数据通过工作区转换,可以使它能够接收数值性 数据但后来你又感觉到这个工作區仍旧不能满足需要,这时唯一能做的就是改变数据库接口 这需要重构提取层并对所有主代码调用进行检查,当然也需要清除先前创建嘚工作区 这样

2014年09月12日 多层分布式架构 重视用户IT整体规划的要求提供应用层标准接口和部分数据字典 适应未来管理的可能需求, 重视系统构造的弹性 遵循用户界面友好性、实用性和安全性相结合的原则

我要回帖

更多关于 我想多了解一下 的文章

 

随机推荐