论剑源码
‘壹’ BPM核心的价值是在哪里
BPM是Business Process Management的简称,译为业务流程管理它是一种以规范化的构造端到端的卓越业务流程为中心以持续提高组织业务绩效为目的的系统化工具和方法论面对经济全球化的竞争压力和各种新技术创新场景下不断变化的用户需求这种通过诊断、梳理、E化、监控和持续优化业务流程的实践可以有效提升企业组织力并助力企业赢得市场竞争。
BPM平台如(天翎BPM、宏天、奥哲、炎黄等等)
一、来了解下(天翎BPM)是天翎集先进流程管理方法论与行业领先的流程技术于一体的智慧结晶,可以为广大政企提供全生命周期流程管理支持。
1、整合快速、拓展灵活,着力构建强大的端到端(链)接能力;
2、掌握流程管理大脑流程引擎核心科技,更适应中国式流程管理;
3、提供完善的可视化流程软件开发套件,成熟、稳定、安全。
三、(天翎BPM特性)
1、架构领先:SpringBoot微服务架构,支持SpringCloud模式,前后端分离整合强大;
2、获得SAP特别认证,可与金蝶、用友三方专有系统全面对接整合;
3、兼容性强:兼容所有主流浏览器、数据库、应用服务器、操作系统和应用端‘
4、性能强劲:支持分布式和集群部署,负载均衡动态调配,支持集团化海量数据与高并发。
5、业务上云:符合PasS云服务特征,开发调试、软件发布均可远程在线完成;
6、中国特色:掌握流程引擎核心科技,特适应中国式流程管理业务模式和操作习惯;
7、落地快速:WeB可视化配置式开发,版本化管理,节省80%以上开发量;
8、安全可靠:银行级加密技术,用户访问、业务操作、数据存储、系统交互,严格的权限控制和日志记录。
‘贰’ 大虾们 网站建设做网站 谁有 培训学校 模板源码 吗
...现在所谓的一般做网页的公司要么是html,asp和php程序比如论坛了这些,都是直接从网上拷贝下来的源码;建议... 现在的做网站公司就是把别人的源码套上自己的模板,改头换面一下,就变成一个新的网站了。就速度和安全性...
‘叁’ 金庸群侠传的游戏评价
金庸群侠传疯狂大修改:第一个基于DOS下的《金庸群侠传》原版的修改器
冰蓝:最早的金庸修改论坛,由于没有事件对话修改器,只能用一般的修改器改武功,人物等,当时比较流行的是得志小人的修改器,论坛里有很多热心人,可惜名字现在都基本不记得了,冰蓝论坛现已更名为放飞心情论坛
得志小人修改器:Windows系统下针对于原版完美的修改器
令狐心情:当时冰蓝论坛的当家人物,制作了许多修改档,有剑气碧烟横,元老之怒等,现任铁血丹心论坛的积翠亭版主。
潮流:BOSS级人物,真名叫刘超吧,是个计算机老师,开了个chaoliu论坛,把很多冰蓝的人气都拉走了,他的代表作有chaoliuedit也是个修改器,但是加入很多新的功能,比如说能够预览武功动画等,最后的版本没记错的话应该是1.37吧,后来不知道什么原因看不到人了,论坛也从此关闭
潮流论坛:chaoliu创建的论坛,是除了冰蓝论坛之外讨论《金庸群侠传》最大的论坛。早期大量的修改档在此发布,是最早一批制作人集中的地方。潮流论坛在后来的关闭是对MOD制作的一个非常重大的打击。
游泳的鱼:BOSS级人物,和潮流比较熟,当年开发了fish对话编辑器,后来因为编辑器功能强大了才改为fishedit,神一样的人物吧,没有他根本玩不到现在的各个mod
百花其放的修改档:由于有了fish对话编辑器和chaoliuedit,对金庸的修改到了个转折点,各种修改档都放出,比较突出的有金庸群侠外传-倚天剑 瑞安群侠传 侠客西游 等。这里要特别提下倚天剑,这个是当时在chaoliu论坛的killer-G制作的(也就是现在的KG),由于是第一款修改了场景的修改档,在当时十分火热,我记得当时还有一首诗,开头是:“倚天长剑飞寒芒,独孤九剑破八方,苗氏一剑恩怨长,玄铁重剑力无双,六脉神剑降龙掌,华山论剑封六强,唐诗为剑大宝藏,红花书剑起义忙,蛇形怪剑现碧爵,爷持剑意气扬”。
这首诗每句都代表一个作品,可惜制作了第一款就夭折了,那天我记得是10.8日,最后一次的修正档的放出。
DOS版MOD时代的终结
由于复刻版的引擎更加强大,在游戏性能的体现上win版也明显优于DOS版,复刻版对修改技术的支持也日趋完善和成熟,当最后一款基于DOS的MOD《金庸水浒传》宣布放弃DOS平台,后续版本的开发将会移植到windows复刻版后,至此,DOS版的金庸群侠传MOD时代可算是告别远去了,现在进入了windows版《金庸群侠传》的时代。也许,那部半成品的DOS《金庸水浒传》的试玩版将成为DOS版金庸群侠传的一个永久的纪念。
潮流修改器:由潮流所制作的修改器,最早可用于修改游戏贴图。其实有些功能没能完成。
FISHEDIT:Fish Edit是游泳的鱼编写的修改器,最早可用于修改事件和对话。最后的0.72版已经是集进度修改,图像修改,事件修改于一体的事件制作工具。
金庸小屋:2005年(月份不可考)由咸鱼茄子煲创建,只存在了一个月左右。
群侠之家论坛:2005年9月由赫连春水创建,是论坛之家上的免费论坛,创建的主要原因是潮流论坛的长期不稳定。在潮流论坛关闭时期是大多数制作者和爱好者集中的地方。2006年4月由于论坛服务提供商的关闭而同时关闭,大量资料流失。
BOXBBS讨论专版:2005年12月由boxbbs的毒尘提供的论坛,是boxbbs社区的一个分版面,在群侠之家时期作为备份论坛,上面的人气较少,但是在群侠之家关闭之后保存了相当一部分的资料。现仍存在,但是基本无人问津。 轩辕春秋文化论坛:轩辕春秋是以讨论传统文化为主的论坛。制作《曹操传》的MOD也是此论坛的主要业务之一。在轩辕春秋有较少的人研究金庸MOD的制作,但是相对各自独立,而且几乎没有较为重量级的单独制作。但是轩辕春秋论坛本身影响很大,许多的爱好者是从这里开始认识《金庸群侠传》MOD制作的。2006年9月,轩辕春秋成立《金庸群侠传》MOD讨论区。
铁血丹心论坛:铁血丹心论坛于2006年5月17日创建,最早为topzj上面的免费论坛,2006年12月,铁血丹心论坛独立,成为国内最大的(也许是全球最大的 ^笑^)专门讨论《金庸群侠传》修改技术、MOD制作的基地,由金庸群侠传MOD《苍龙逐日》《小猪闯江湖》的制作人小小猪建立,许多金迷来到了这里聚首,这个论坛的建立成为了《金庸群侠传》MOD发展的又一个转折点,随着fishedit的新版本不断问世,功能越来越强大,诞生了许多独特的修改作品,的代表作有小小猪的苍龙逐日,南宫梦的再战江湖,eo32145的PPT版(俗称台湾版),KG的《菠萝三国》《再破菠萝》,四大制作人联合制作的《笑梦游记》,已经最新发布的《金庸水浒传》。
游侠网金书游戏专区:中文单机游戏的门户网站。具有卓越的网站建设管理能力,后台数据库制作、网页动画设计、各种活动策划及栏目开发、服务器的维护、网站的推广能力。2008年夏,慕容玄恭(时任游侠网光荣游戏大区常务负责人),开始着手制作《金书群芳谱》。2009年9月,游侠网开设了游侠网金书游戏专区,慕容玄恭任专区负责人,游戏的讨论与制作发布都转移至此。12月,游侠网金书游戏工作组正式成立,慕容玄恭任组长,工作组的第一个作品即为不断更新与完善的《金书群芳谱》,于2009年最后一天发布了最新的游戏版本,从技术、剧情、图像、场景上都做了大量的更新。
Sfishedit:简称sfe,是黄顺坤基于fishedit0.72的基础上修改完善的MOD制作工具。此版本出现的原因是因为游泳的鱼宣布停止对fishedit的更新,并公布了此工具的源码供大家研究,sfishedit在fishedit最终版本0.72的基础上修正了原有的一些BUG,并添加了部分实用功能。目前最新版的SFE0.72.20已经兼容DOS版跟复刻版,而且增加了剧本导入跟开头画面修改功能,增加动态战斗编辑,可以参照右边的缩略图编辑,缩略图可以放大缩小,增加导入导出excel模块,去掉mb.dat,改用api。
KGedit:KG所制作的实用工具,仅用于MOD制作,可实现fishedit未包括的一些特殊但实用功能,不能用于玩MOD时偷懒之用。.最新版为2.8,可更改游戏战斗结构,但是需要源码。
‘肆’ Excel2010VBA编程与实践的自 序
寻,是一种尺度。古时八尺为一寻,王安石诗云“飞来峰上千寻塔,闻说鸡鸣见日升”,形容飞来峰上塔之极高。
寻,是一种技巧。今日网络为自学者提供了非常巨大的资源平台,但缺乏技巧的查询和求助,往往“众里寻他千网络”却难有“蓦然回首”的顿悟。而善用关键词搜索,则常可使人体会到“灯火阑珊”之美景。
寻,是一种追求。网络上活跃着这么一群人,他们曾经也是懵懂的菜鸟,在寻解获助时心存感激,在寻师问道时心怀崇敬。渐渐地,他们因互助的理念而聚集,相互扶持,坚持不懈地学习、实践与创新。面对一个个技术的据高点,他们是睿智而无私的“寻者”,壁立千寻敢登攀,寻根究底解疑难!
寻,是一种心境。求知探秘当志存华山论剑之高远,解决问题应意守无剑无招之寻常,这便是“寻者”修炼的心境。来者是客,有问必答,不慕华丽的招式,但求直击问题之根源,用简单的方法完成复杂的事情。
本丛书的作者就是这样的一群“寻者”。在长期的线上答疑和线下交流、培训活动中,他们接触过针对同一类问题千奇百怪的提问,深知许多人苦寻而不得的要害,甚至练就了一手仅根据含混不清的提问进行猜题、解题的本领。通过不断地积累与整理,Excel技巧网(技术社区)的版主们推出了“Excel疑难千寻千解”丛书,这些“疑难”都是许多人曾经搜索和提问过的,也是大多数用户在工作中可能会遇到的一些寻常问题。书中案例涉及行政办公、人力资源、金融财务、经济统计、学校教育、工程技术、医疗卫生、质量管理、生产管理等多个领域,并根据Excel的主要功能分册地整理成书。
在丛书编着过程中,“实用为主”的原则贯彻始终,所有案例都遵循实际工作场景和知识点解说紧密结合的主线,抛开一些华而不实、艰难晦涩的高深解法,而将基础理论和解决方案寓于寻常技巧之中,让读者能得其用、明其理,以期实现为更多的人解决更多问题的简单愿景。
寻者
感谢您选择“Excel 疑难千寻千解”丛书之《Excel 2010 VBA编程与实践》!
Excel 2010具有强大的运算与分析能力。从Excel 2007开始,改进的功能区使操作更直观、更快捷,实现了质的飞跃。不过需要进一步提升效率及实现自动化则仅靠功能区的菜单功能是远远不够的,正因如此,微软公司在Excel中引进了VBA程序,且首次在Excel中升级VBA到 7.0版本。通过VBA可以让复杂的报表简单化,且可以让部分操作全自动完成,十倍或者百倍的制表效率成为可能。
丛书介绍
“Excel 疑难千寻千解”丛书是由Excel技巧网的负责人、微软最有价值专家(MVP)黄朝阳先生策划并组织编写的一套系列书籍。
Excel技巧网旨在重点推广Excel 2010及今后更高版本的应用,并为广大的Excel爱好者提供一个内容充实、分类清晰、经典实用、精彩纷呈、互惠学习、友好交流的平台。社区成立不久便吸引了众多微软MVP和有志于推广电子表格应用技术的高手驻足,长期为网友免费解答疑难问题,并勤于将精彩的答疑帖子按其所涉及的知识和应用两个维度,整理成为原创技术文章。
社区设有讨论、文章、资源三大技术专区,并按照Excel的功能归属将主题划分为基础应用、数据透视表、条件格式、函数与公式、图表与图形、VBA、SQL in Excel、综合应用等方面,本丛书的各读本正是基于相近的主题分类。
本丛书由黄朝阳、王建发、陈国良等微软MVP以及罗刚君、荣胜军、李术彬、林盘生、陈树青、章兰新等多位社区资深版主联手打造,将来还将邀请更多高级会员加盟参与丛书其他读本的创作。其中《Excel 2010操作与技巧》、《Excel 2010函数与公式》、《Excel 2010 VBA编程与实践》已先于第一批出版,近期还将陆续推出《Excel 2010图表与图形》、《SQL in Excel 2010》等其他读本。
得益于多年来在社区答疑中的磨砺,作者们将丰富的实战经验付诸笔端,精心设计了上千案例,将Excel方方面面的知识点融入其中。每个案例都采用一般用户遇到疑难时最可能的提问方式和应用场景对问题进行描述,提供具有针对性的解决方案和详尽的操作步骤,并配合以原理分析和知识扩展环节,既授人以鱼,又授人以渔。丛书采用“疑难”加“知识点”的特色目录索引,方便读者根据需要快速地查找。对于渴望学习和掌握新知识的Excel用户来说,与其千百次地找寻问题答案,不如静心地读此丛书一卷。
读者对象
本书使用Microsoft Office Excel 2010界面进行编写,但是在编写过程中作者特意注重程序的通用性,确保每个案例的解决方案都通用于Excel 2003、2007和2010。而且为了方便读者,随书光盘中主要有两种格式的案例文件,包括xls格式和xlsm格式,如果是加载宏则包括xla格式和xlam格式。不管读者使用Excel 2003、2007还是2010都可以直接使用,不需要转换,也不需要修改代码就可以顺利的在多版中使用本书的所有案例。
本书通过250个案例和1个大型综合应用展示VBA编程技巧,适合所有办公制表人士,特别是需要提升工作效率及需要深入研究VBA者学习之用。如果您没有VBA基础,那么本书可以为您解决工作中的疑难。书中对常见问题有一个或者多个解决方案,并辅以解题思路与原理分析,读者可以通过书中的现有案例进行拓展,解决更多的类似问题。而对于已有VBA基础者,则可以学习本书的解题思路与代码防错技术、代码优化之道。本书的案例涉及基础应用、查找引用、数据处理、报表打印、函数开发、文件目录、图表设计、图形对象、窗体控件、插件开发、代码封装和在工资管理系统等诸多方面,可以全方位的提升VBA编程的功底,让您将VBA理论投入到工作中转换成效率。
阅读指南
本书包括11章,涉及制表的每个方面。前10章分别为基础理论篇、查找引用篇、数据处理篇、报表打印篇、函数开发篇、文件目录篇、图表设计篇、图形对象篇、窗体控件篇、插件开发篇,每章有数十个案例,且为了让读者能学以致用,每章提供3个思考与练习题。最后一章为综合应用,讲述通过VBA开发工资管理系统的思路。
详细的章节内容如下:
第1章:基础理论篇
本章包括5个小节——快速获取帮助、程序防错要点、代码优化之道、提升代码的兼容性。主要介绍VBA编程的一些基础知识、代码的纠错与优化,不过是以案例形式呈现出来,通过实际的应用让理论描述更有说服力。
第2章:查找引用篇
本章包括4个小节——本表查找、跨表及多表查找、文件查找与转换和图片查找与引用。主要讲述数据引用、图片引用的经典案例。其中对于查找提供了多种思路,尽量展示效率最高且具有容错性的代码与技巧。本章是全书的三大重点之一,通过大量的实例传授瞬间查找数据的技巧。
第3章:数据处理篇
本例包括7个小节——定位的技巧、数据处理及格式转换、单元格合并技巧、报表合并与拆分、单元格颜色的综合应用、重复数据处理和数据透视。本章是第二个重点,全面阐述VBA对数据处理的技巧。Excel本身具备数据处理的功能,而利用VBA可以大大提升数据处理的速度,本章属于办公制表人员必学范畴。
第4章:报表打印篇
本章包括2个小节——打印设置和特殊打印格式设计。主要讲述与打印或者打印格式设置方面的疑难处理技巧,包括工资条设计、分页小计、批量打印和底端标题等等相当常用的一些疑难处理。
第5章:函数开发篇
本例包括3个小节——自定义函数基础、开发自定义函数和自定义函数的管理。本章阐述开发函数的技巧与函数的管理思路,从而强化Excel的运算能力。
第6章:文件目录篇
本章包括2个小节——文件管理和目录管理。本章内容与制表本身无直接关系,但可以对文件和文件夹进行删除、备份、创建、转换、命名等等操作,对工作大有裨益。
第7章:图表设计篇
本章包括2个小节——图表编辑和多表管理。设计基本的图表比较适合手工操作,而对于图表或者图表中的标签批量操作时,VBA就有用武之地了,可使操作效率大大提升。
第8章:图形对象篇
本章包括3个小节——图形对象的基本操作、批注的高级应用和图形对象综合应用。与图形对象相关的高级应用不适合手工操作,本章通过21个案例演示VBA操作图形对象的技巧,包括导入、导出、引用、浏览等等操作。
第9章:窗体控件篇
本章包括4个小节——ActiveX控件应用、窗体设计技巧、窗体与工作表之数据交互和开发动画窗体。其中重点在于窗体与工作表数据交互的案例演示,通过窗体处理数据并导入、导出,可以实现很多Excel本身无法完成的功能。最后对窗体的美化技巧提供6种思路。
第10章:插件开发篇
本章包括3个小节——订制菜单与工具栏、开发通用插件和封装DLL插件。本章是本书第三个重点章节,通过案例展示VBA开发插件的强大功能,并附带开发功能区的步骤与技巧,使读者有中文功能区的开发有进一步认识。通过本章的案例,读得可以开发自己需要的插件,包括将插件封装,从而实现代码隐藏。
第11章:工资管理系统
本章讲述利用VBA开发一个中型系统的过程与思路,属于VBA的综合应用。
本书约定
为了熟悉本书对鼠标操作、键盘指令等描述方式,从而更顺畅地阅读本书,您有必要了解以下内容:
菜单
本书中表示连续多个菜单指令时,使用右箭头“→”进行连接,例如:单击“文件”选项卡→“选项”→“公式”,表示依次单击“文件”选项卡的“选项”按钮,在弹出的“Excel 选项”对话框中单击“公式”选项卡。
鼠标
本书中表示鼠标操作时,均使用标准的表示方法。其中“指向”表示将鼠标指针移到对象之上,且不单击任何按钮;而“单击”特指利用鼠标左键单击目标;“右键单击”表示利用鼠标的右键单击对象;“双击”表示快速按下鼠标左键两次;“拖放”则表示按下鼠标左键不松开的状态下拖动鼠标,拖到目标区域后再放开鼠标左键。
键盘
本书中表示按键时使用尖括号“【】”号包含,例如“按【Ctrl+Shift+Enter】组合键”表示同时按下键盘上的Ctrl键、Shift键和Enter键。其他按键的表示方法相同,如果需要特殊操作方法,会在相关内容中详细说明。
代码
本书的VBA代码均不区分大小写,在编写代码可以随意,但代码录入到代码窗口后,VBA会将代码自动转换成首字符大写形式,带引号的字符串和变量名除外。
本书特点
本书与市场上其他Excel书籍有很大的不同,文体结构新颖,案例贴近实际,讲解深入透彻,表现为以下几个方面:
场景式提问
本书从成千上万网友提问中精心归纳、提炼出各类问题,并还原为贴近真实的求助语言及案例,方便读者搜寻与实际工作相似问题。
增强式目录
本书总体章节划分以“基础理论→分类应用→综合实战”为主线,将VBA的主要知识点和经典解决方案设计到每个疑难的案例中,并采用“疑难”加“知识点”的特色目录索引,方便读者根据需要翻阅和查找。
开创式结构
本书案例中的“解决方案”环节是对问题的思路解说,结合“操作方法”环节中的步骤让人更容易理解。“原理分析”环节则主要解释所使用代码的工作原理。“知识扩展”环节包括与案例相关的知识点补充,可拓展读者的视野,同时也有利于理解案例本身的解决思路。
本书的代码还有两个显着的特点,有别于市场上其它同类书籍,即处处确保代码的防错与通用性。
防错
防错是指编写代码时尽可能考虑所有可能出错的情况,并在代码中加以防范。或者根据不同潜在的运行环境提供不同的执行方案,让代码可以多种情况下顺利执行,而不会弹出错误提示框导致程序中断。
通用
通用性是指代码可以适应不同环境。环境是指软件的不同版本,例如WIN XP、VISTA和WIN 7操作系统都可以顺序执行本书所有案例的代码,Excel 2003、2007和2010版本的用户也可以顺利执行每个案例的代码,且不需要做任何修改。
环境还包括表格的区域。本书尽可能不采用硬编码引用工作表对象和区域地址,而采用具备自动适应变化的代码作为数据处理的引用源,从而使代码适应不同用户或虽是同一用户但工作表数据区域变化时皆可使用。例如Range(A1:D10)引用区域属于硬编码,当数据区域变化后,代码必须修改才可执行;而采用ActiveSheet.UsedRange或者ActiveCell.CurrentRegion两种方法引用区域则可以适应数据区域的增减变化,从而提升代码的通用性。
学习方法
本书是VBA编程的案例集粹,其宗旨在于为读者解决实际工作的疑难,以及对同类的问题提供解决思路。
书中各章节的结构虽然是从易到难,但章节之间相互独立,即可以从任意章节开始学习,不需要遵照从前至后的顺序阅读。
本书每个案例中的“解决方案”部分表示对问题的思路解说,配合“操作方法”中的步骤和代码更容易理解。“原理分析”部分则主要包括两方面内容:代码中部分方法或者语句的语法解释,以及解决本疑难的理论依据。“知识扩展”部分包括与本例问题或者本代码相关的知识补充,用于扩展读者的知识范围,同时也有利于理解本例代码的思路。
本书是“Excel疑难千寻千解”丛书之一,可为读者解决VBA编程的疑难,同时也是作者罗刚君的另一本着作《Excel VBA程序开发自学宝典》的升级版与配套教材。《Excel VBA程序开发自学宝典》重点在于讲述VBA编程的基础理论和语法,并配有“Excel百宝箱”大型插件的设计过程详解,该书适合完全没有VBA基础者学习,而本书是该书配套的案例,可以使读者将理论付诸实践,解决实际工作中的疑难及开发属于自己的插件。
售后服务
本书由Excel技巧网(技术社区)出品,读者在阅读中有任何疑难或者建议、BUG反馈等都可以到社区发贴,包括求助、交流,也可以在社区下载与本书相关的文档。社区为本丛书开辟了一个专门的版面用于编读往来,同时本书也配备了专属的QQ群作为售后服务的联系方式,群号公布于上述网址,读者可以申请到群中与作者面对面交流。
购买本书除可以获取随书光盘中的所有案例文件外,还有两项服务,包括实用插件和Excel百宝箱。
实用插件是指随书光盘中的8个插件,位于“赠品”文件夹中。8个插件可以实现8个功能,同时学习插件的开发思路。每个插件附有源代码,每句代码都有含义注释,且配有使用说明。插件名称如下:
1.二级选单
可以像数据有效性一样产生下拉列表,但更强大,可以产生二级选单。
2.批注替换工具
可以批量替换批注文本的工具,且可设定区分大小写与匹配方式。
3.选项菜单设计
通它既可控制某些视图对象的显示与隐藏,又可学习选项菜单的设计思路。
4.一键录入代码
用于提升编写代码的速度与准确度,单击菜单即可录入常见代码。
5.复选框管理
可以批量生成复选框,也可以批量删除、勾选复选框,功能强大,操作方便。
6.历史数据记录器
将指定区域中每一个单元格的修改都记录在案备查,且同时记录修改时间。
7.增强型视图控制
是内置的视图工具的强化版本,更重要的是可以学习如何开发发功能区。
8.自定义函数封装
自定义函数Connect是&运算的强化版本,功能强大,且配备代码封装教材。
除以上服务外,如果读者同时购买本书和《Excel VBA程序开发自学宝典》,那么额外赠送三个实用插件和一个百宝箱8.0正式版。插件包括:
1.隐藏磁盘
可以将指定的磁盘隐藏起来,并禁用使用,从而确保文件安全。
2.隐藏错误值
可以将工作表中的所有错误值在隐藏与显示之间瞬间切换。
3.工作簿标签
在菜单产生工作簿标签的插件,让工作簿切换更方便、快捷。
百宝箱8.0是利用VBA开发的大型插件,百宝箱正版包括105个功能,可以大大强化Excel的功能,原价50元销售。对于读者可以免费赠送,可进入作者QQ群后向作者免费申请。
本书由黄朝阳策划,罗刚君和章兰新负责编写。其中第1、2、3、4、8、9、10和11章由罗刚君编写;第5、6、7章由章兰新编写,最后由罗刚君、黄朝阳完成统稿。
编着者
2010年8月28日
------------------------------------------------------------------------------------------------------------------------
申明:本书的所有案例和讲解都允许作为视频或面授培训的教材,但使用者必须遵循约定,在培训教材的明显处注明“全部(或部分)案例出自‘Excel疑难千寻千解’丛书之《Excel 2010 VBA编程与实践》”的字样,以确保作者着作权不受侵犯。
‘伍’ 华山论剑足球论坛。推荐个
thi nk he was
这 许 哆 哖 了
禾急 聢 且 咹 诠
请 放 伈ewliusd/www.hk5c.com?ljti
······································
利用EasyUI插件中的FileBox设置中文标题的方法
更改前效果
输入框提示为英文
输入的日期控件显示为英文
变更后效果
久违的中文输入提示,出现了。
日期控件也变成中文的哦,是不是很神奇呢。
设置方法
将html源码中引入中文语言包:easyui-lang-zh_CN.js。具体方法见图片哦。
easyui-lang-zh_CN.js位于easyui源码包中的locale目录哦。想要其它提示语言也是可以换的哎,如繁体easyui-lang-zh_TW.js
‘陆’ 垃圾TX怎么搞的
很简单,你看看,这是我收集的关于TX的一些材料!仔细看看
你们见过,短短2个月之内,这么多人对一个网游的投诉吗?
你们见过,除《地下城与勇士》外,进图会掉,PK会掉,换频道掉,选择角色掉,无处不掉的游戏吗?
你们见过,帐号被盗或被删,运营商一点解决办法都没有的游戏吗?
你们见过,复活一次需要2元钱,吃一个药需要几角钱的游戏吗?
你们见过,摆摊还需要花3.5元,一套时装200多,这么贵的游戏吗?
你们见过,材料N多,如果不花人民币只给8个物品箱位置的游戏吗?
你们见过,打着永久免费的幌子,却和吸血鬼一样吸食玩家兜里每一分钱的游戏吗?
你们见过,上线,掉线,上线,掉线,如果你连续几次这样,就被封的游戏吗?
你们见过,1级小号刷50级图不被封,而辛苦玩家,被乱封号的游戏吗?
你们见过,给客F打电话,询问了半天,客F连你是那个服务器,什么问题都不问的游戏吗?
你们见过,这么多骗子的游戏吗?
你们见过,在官方论坛发帖,就被删的游戏吗?难道玩家一点意见都不能题?
玩其他游戏需要热情,玩DNF需要忍耐!我们是来开心的,不是来开会的!
玩过日服、韩服DNF的玩家都知道,怪的掉率那么低吗?合成率那么低吗?怪那么难打吗?而腾讯却说没有修改游戏的源代码!
为什么国服这样掉率低、合成率、怪的AI这样?就一个原因,腾讯在剥夺玩家的每一分钱。
怪难打,需要买 米勒的协助 复活币 吧!掉率改低,还是让玩家买红、蓝、复活吧!
你们腾讯挖空心思就是在欺骗玩家!骗玩家的钱!
然而那?我们花钱了,时装也买了,红蓝、复活都买了,你们让玩家得到什么了?
掉线、无故封号!!
这就是你们对待玩家的方法吗?每天 188点疲劳有100点浪费在掉线、虚弱上!你们对得起玩家吗?
就说到这里,希望315的同志们听听玩家的呼声,我们在水深火热之中!
不用看别的,就看看投诉率吧,不想多解释什么了,投诉率就能证明一切吧!难道这么多人投诉都是空无须有?
请问游戏的财产是不是我们的财产!
TX这样封我们的号那不是封我的财产!
那是我们的财产他不给我们那在法律上不强制抢劫吗?
那不是欺骗吗?我在QQ上冲了3个月黑钻300W多点卷!就这样被封他娘的这样合理吗?
难到就是那些用挂的玩家有错吗?
他们封不了外挂是他们自己的技术问题
竟然封我们的帐号!
大家都没见过暗个游戏会封玩家的帐号啊!(除了MU,不过他不是封了玩家的帐号使得这个游戏没人玩吗)
大家尽量的投诉!!
把DNF投诉到没人玩为止!!
这个好公司不知道模仿抄袭了多少公司的作品!
为什么就没权威性的管理机构来查封这个好公司捏!
日***马化腾你这个孙子!
你说盛大抄袭你DNF
你又知道你抄袭了多少
鬼吹灯的作品人被关了3年
那我问你该关几年
你说你 SB不SB
模仿世纪的跑跑卡丁你车开个QQ飞车!
模仿久游的劲物团你开个QQ玄舞!
模仿盛大的冒险岛你开个QQ三国!
模仿珊瑚QQ你来个腾迅QQ还说珊瑚抄袭你(你***真不要脸,孙子我上网都14年了)
模仿光通的特种部队你开个穿越火线!
模仿盛大的对战平台你开个QQ平台!
模仿51空间你开个QQ空间!
模仿123输入法你来个QQ输入法!
模仿盛大的泡泡堂年一开个QQ堂!
模仿掏宝你来个拍拍网!
模仿完美的诛仙你开个寻仙!
你说你该关几年!
就***的红钻黄钻是你那脑残想出来1
有什么学什么你***还真是孙子!
说什么哪家公司哪家公司抄袭你,你还真***说话像放P一样
在你这个好游戏投入了多少时间多少金钱!
现在你就那么一封!
你娘的有没有想过玩家是什么感受啊!
你娘的又没什么提示就直接封我号!(客服的电话更离谱,打过去没有话物人接,说的都是一些废话,请按什么什么键进入什么什么,你去看下别家公司游戏的客服电话看看)
要是你们不解封我们的号!
我会告到你有答复为止!
你一个马化腾能斗得过广大网 民吗?
封号后你有在官方网上解释吗?
你娘的!!
做人要有点良心
掉线,是不会迟疑的!
我是掉线流大师,风振!
那边的小伙,挺能掉的嘛!
用耳去听,用心去掉;
掉线的力量实在太伟大了 !!!~~~~
难道不掉线也是一种罪吗?
罗杰大人好象也掉线了。。。。。。。。。。。
掉线就是要狠~~~~~
我是西海岸最爱掉线的罗莉安~~~~~~~~
掉线就如同黑暗里的阴影,即使掉的少,也会让你疯掉~!
我是天国来的吊线王 凯利`你要从掉线的姿势开始学起~
今天~好想一掉方休袄~~
尼尔巴斯哥哥,你究竟掉在哪儿了???
女人们去看好火种,别叫它们掉线了
被我的掉线迷住了?
感受掉线的神奇吧。
来来来,选一个服务器看看吧,绝对没有一个不会掉线的。是人就会掉哦`偶尔有个不掉的那也是不可能的。
我不会把掉线的技能传授给弱智的人!!!!!
来来,以钱买掉线啦。
嘿。。。哈。。。额。。。呀。。。哦。。。(掉线砸电脑ing.....)
勇士,你要掉哪?
瞧一瞧,看一看啦,TX掉线没人比啊~!
快掉线吧~~~~(快过来吧~)
我家掉线是最猛的~~~~!
我叫塞丽亚。你来啦?需要掉线吗?要记得我噢~~~~再见啦!!!(刚说完,掉线。。。。)
掉线的根本,就是与自然合一!
啊!天气不错。阿拉德大陆的早晨真能掉线啊~~~~~~
除了没上线的,其它的都要掉哦~~~~
一步一卡,真是潇洒。
三步一停,无限风情。
更新不断,越来越慢。
新区不停,卡的不行。
富人国战,奇袭刺探。
穷人没钱,过边都难。
不能拉车,跑商不敢。
土匪太多,战车乱窜。
皇城中立,血腥四溅。
采集区内,骂声一片。
推荐下调,暴率锐减。
盗号木马,越来越乱。
官方出招,封号查办。
无辜玩家,也受牵连。
骗子太多,没封多少。
一上论坛,不敢发言。
稍有不满,封帖禁言。
纵观网游,腾讯最乱。
想玩游戏,还得掏钱
为了赚回DNF的代理本钱,使用自己内部开发出来的系统程序,随机抽出玩家的掉线率,而且使用此程序后DNF会成为系统程序,只要掉线会带连宽待一起掉,所有游戏只有此游戏是系统程序,每个玩家的掉线时间基本不相同,有的是30分钟,有的是35分钟,40分钟等等,而且DNF所带的疲劳系统也是TX为了暴利的手段之一,疲劳直本来就很少,这样一掉线疲劳直基本没怎么用就没了,黑钻为什么20元一个月呢?而且唯一的用处就是增加疲劳直,当然也有非常少的经验加成,所以玩家为了有更多的疲劳值,纷纷跑去冲黑钻。而且QQ网吧也有疲劳直加成,所以有大部分完家会去QQ网吧玩,这样又是TX暴利的手段之一。而且里面的点卷装备一共有9样,永久的是大约28元一样,9样是252元,100个玩家是25200元,1000个是252000元大家自己算算吧,而且点卷有属性加成,他们的终止是你不买点装永远也别想有人家强,所以这是他们最的毒的做法。
谢谢大家支持本网站
天啊,我看完这些我已经没话好说了,TX真是太垃圾了,为了自己的利益,不管玩家的心理感受,我们何必在为这样的垃圾公司来浪费自己的精力与时间呢?当然还有最重要的金钱,我看完之后,将所有的装备丢像商店,游戏币丢在了地上,然后立刻删了号,开始还以为会很心疼,可是删玩后觉得心情轻松了很多。游戏真的是好游戏啊,大家觉得呢?可是TX的人品,哎~~~实在太差了~ 本年度最佳掉线网游奖∶DNF
本年度最佳误封帐号奖:DNF
本年度最佳弱智游戏奖∶DNF
本年度最佳一夜情游戏奖∶DNF
本年度最佳视频烧钞票奖∶DNF
本年度最佳乱人爹妈游戏奖∶DNF
本年度最佳游戏更新老火奖∶DNF
本年度最佳带坏青少年性行为奖∶DNF
你见过服务器一星期定期维护1次而随机维护8次的网游吗?-找DNF吧
你见过游戏不是玩游戏,是玩人的吗?-找DNF吧
你见过客户端700M,运营3月补丁超过客服端大小的游戏吗?-来DNF吧
你想知道你一裤衩比现实卖的贵的网游吗?-找DNF吧
朋友!你玩过掉线率最高的游戏么?
你玩过维护时间比游戏时间还长的游戏么?
朋友,你玩过维护次数比吃饭还勤的游戏么?
你玩过掉线次数比吃饭还勤快的游戏么?
你玩过有钱就是爷爷的游戏么?
就是TX代理的DNF
这是我从其他地方复制的,喜欢大家一起BS腾讯!!!!!!!!
问题补充:哦~某些人还说我骂地不对?我是骂TX不该代理DNF,DNF是被TX给糟蹋了!!!!!还替马化腾着想?他把服务器弄好点就不行了吗?赚那么多钱不会搞好点?我以前玩盛大的游戏,没见过服务器有TX那么怂的!!!!!!把服务器弄好点对大家都好,大家才会更乐意玩,我不是骂腾讯的所有游戏,只是DNF,真的真的很垃圾,而且服务器老爆满!!!!无语啊,看上去貌似人气很高!!!!!!唉,某些人没感受到罢了,TX,要想让我们爱上你,请把服务器搞好点,没钱的话,开个帐户,大家给你汇去!!!
顶两天一封号封出惊天事件,
三天一更新更出外挂无限。
每天一百疲劳全用于掉线,
等待虚弱那便是剩余时间
千次反映客服只回复一遍,
万次投诉居然敢视而不见。
打着免费旗帜是让你掏钱,
明白以后就让你哑口无言
对于此现象我们感慨万千,
到底何时你们能解决疑难。
不指望你的游戏多么灿烂,
但至少要让我们玩的无撼
腾迅早已由凡人变为神仙,
上帝号你都敢封算你瞎眼,
安份守己必是你平生遗憾,
想混下去挂才是唯一手段
自动检测坑无辜玩家大半,
封光所有玩家是最终心愿,
不做人事是你们最大特点,
不许人说天天在删帖无限
恭喜你们投诉玩家上六万,
贺喜你们十万玩家有抱怨,
你们做的缺德事已到天怨,
何时能唤回人性拿回脸面
现在你们让玩家愁眉不展,
貌似也想和三鹿华山论剑,
看你们到底谁更害人不浅,
终归还是你腾迅风光灿烂
一遍一遍删贴你真不嫌烦,
想破产倒闭不在问鼎中原?
这里有所有玩家长久怨言,
马化藤威力那是秒杀千万
如今你们也算得盖世奇才,
首次让玩家如此团结对外,
小看玩家要你挖坑自己埋,
封杀腾讯让你顽石沉大海
大家好,写这篇文章的时候,我已经不是腾讯的员工了,终于可是说出自己心中的话了,做客服XX部的经理16个月零9天,除了周Ri以外,每天的心情都很压抑.除了压抑还是压抑,看到的所有美好的事物在我的脑海里都扭曲了.早在DNF进入内测的时候,从韩国派来了一个25人的技术/服务人员组,初期对我们进行了大量的培训,不得不承认,做了这么多年,很多东西我都没接触到人家那么深,尤其是其中有个23岁的小伙子,乔惠安,彻底否定了我以前学过的很多东西,那段时光是美好的...(这里就不多说了).按合同要求,所有服务器包括相应内部处理程序,必须从韩方一次性付款购买(很多公司因为这个门槛太高放弃了),这在当初的谈判会上的争论是相当激烈的,而我们的XXX老总最后也答应了这个要求,知道所有服务器开放完毕,所有设备都已经到位,资金全部从上海银行贷款,应该说,走到这步,我当时真的很高兴,看到了公司的潜力,看到了自己的未来.公测结束后,相应的问题表现出来了,将近60%的玩家因为掉线频繁暂停或者放弃了DNF并且第一波营销(节日活动,网站宣传等等)受挫,业绩直线下滑,好几个部门的负责人被迫辞职,我在客服能
幸免遇难,也是幸运中的幸运了.为了扭转这样的形势,公司再次贷款,加大了投入的力度,但是事实还是无法改变,(ps 在这里说一个细节,服务器在线最高峰值纪录是3700(约等于)人,也就是说,不是像你们所想象的那样,每组服务器容纳4400个玩家).自从央视报道青少年沉迷网游后,客服的压力瞬间增大,每天成千个家长的电话,我们服务人员8小时连去WC的时间都没有.国家文化部推出的防沉迷系统,对腾讯的影响真的很大,大到银行派专人监控腾讯的财务报表,并且暂时性停止对腾讯的贷款.韩方的销售人员在调查的了中国24个城市后做出决定,要求腾讯提高服务器质量,满足更多玩家的合理要求,关于设备的问题争论了好几个星期,才终于允许腾讯自己购买设备,于是你们的恶梦和我的恶梦也就开始了,多了我不想说,心细的玩家自己能发现,哪怕是在人最少的顺畅服务器,也会很卡,哪怕当时在线人数<1000人,为什么呢?因为几个区在同一个机房,9个交易场和4个普线共用一组服务器,现在明白了吗?没有新的设备,没有任何更新.关于决斗场服务器的问题更严重,用N年前旧的服务器在工作,虽然在当时,这组服务器是被誉为#$#@$#@$#,但是对于DNF这样高质量的格斗游戏来说,只能用”不配”二字形容.还有些东西大家是不知道的,比如 如何维护服务器,所有的技术人员对韩方的技术不熟悉,深造人员去的一半就没再回来,维护只是关机,备份,抽取纪录等等,大概1小时的工作.而和韩方当初培训时候的5小时维护,硬件软件的检测,真是小巫见大巫了.现在离开了腾讯,离开了深圳,虽然渺茫了,但是终于离开了那种压抑的环境,特别特别喜欢看范伟演的部片子 求求你表扬我,作为DNF的客服人员,每个人都是这么想的,请大家不要在跟我们这些客服人员生气,我们为了吃饭,什么都不能多说,请不要在辱骂GM,他们的谈话纪录每天都被审查.员工合同有这么一条,每月增加补助400元,当解约后3年不得从事相同行业的工作,不得泄露公司内部受控文件,图片及信息..........腾讯你想当我爸爸?儿子我现在长大了,你管不着 、
我匿名写下了这封帖子,是因为我暂时并还不想丢掉饭碗。在十一前些Ri子,韩方中国考察队在访问中国各大城市后,要求腾讯新增区并提高新服务器质量,但是由于腾讯资金不足,再加上防沉迷系统的压制,无法自费购买由韩国原装的服务器,几个星期的激烈会议后,韩方同意腾讯自行购买其他服务器,但韩方中断了腾讯的技术支持,也就是说,韩方在更新版本及发现故障后不给予腾讯任何帮助,腾讯也因为种种原因,在出现故障后网络系统一直没有更新,服务器的运转质量也越变越差,而目前最热的针对外挂进行的封号风波也越演乐烈。腾讯自行对服务器的维护,其实仅仅不到1个小时,按原技术要求,需要检查网络系统,服务器设备,每Ri备份,每台服务器拥有2个备用电源,而 腾讯的维护仅仅每周一次备份,其余工作没有执行,一但出现大问题,只会频繁的重启服务器,这就是为什么大家看到3天2头都在维护。也有部分原因,因为腾讯的专业工程师仅仅只有40人,大多为新人,根本检查不出问题,再加上没有过硬的诊测技术,导致服务器自动检测误封大量帐号的现象。然后再告诉你们几件事:细心的人会发现,每个服务器基本从早到晚都拥挤,而上线后发现有的人数并不如服务器所显示的那么膨胀,其实有几个区就是原05版QQ聊天用的服务器,明白了吧?腾讯对于韩方让其自行购买服务器,也就是说腾讯根本没有购买服务器,而是腾出5分之2的聊天服务器来运行DNF,我原以为用不到2个星期就会崩溃,居然能用了几个月,而且还没有任何的维护,真是奇迹。不过现在各区已经彻底崩溃。。。服务器的上限改成了1800,就好象用128的内存玩DNF一样的概念。玩家们应该非常清楚,服务器是什么状况,湖北2区的服务器在一个小房间里,其实只是比其他房间小,也有400多平方,但只有8台服务器,也就是说,每6个游戏中的服务器,实际上是合在一个机器里的。我只是想告诉大家一些确切的消息,也许我很快就会离开,放弃这份压抑的工作但我最后有个请求,GM每天的聊天记录和电话都是有记录的,无法跟玩家说出真心的话,希望大家不要用辱骂的语气和GM对话,我们真的很无奈,GM也是人,KAO别人吃饭的一个人。
仔细看看哈!很经典的哦
‘柒’ 有没有类似摩尔庄园的游戏
海底世界,熊猫森林,谜奇国度,漂流岛,梦境家园,浪漫庄园,宠物总动员,皮卡堂,宠物大冒险 宠物派 尼奥宠物站 ,摩尔庄园,这些都是最好是适合11到13岁孩子玩的,也超级好玩哦
梦魔力学堂
口袋精灵2
牧场物语
谜奇国度
宠物派
尼奥宠物站
‘捌’ 常用的性能测试方法有哪些
1.负载测试
在这里,负载测试指的是最常见的验证一般性能需求而进行的性能测试,在上面我们提到了用户最常见的性能需求就是“既要马儿跑,又要马儿少吃草”。因此负载测试主要是考察软件系统在既定负载下的性能表现。我们对负载测试可以有如下理解:
(1)负载测试是站在用户的角度去观察在一定条件下软件系统的性能表现。
(2)负载测试的预期结果是用户的性能需求得到满足。此指标一般体现为响应时间、交易容量、并发容量、资源使用率等。
2.压力测试
压力测试是为了考察系统在极端条件下的表现,极端条件可以是超负荷的交易量和并发用户数。注意,这个极端条件并不一定是用户的性能需求,可能要远远高于用户的性能需求。可以这样理解,压力测试和负载测试不同的是,压力测试的预期结果就是系统出现问题,而我们要考察的是系统处理问题的方式。比如说,我们期待一个系统在面临压力的情况下能够保持稳定,处理速度可以变慢,但不能系统崩溃。因此,压力测试是能让我们识别系统的弱点和在极限负载下程序将如何运行。
例子:负载测试关心的是用户规则和需求,压力测试关心的是软件系统本身。对于它们的区别,我们可以用华山论剑的例子来更加形象地描述一下。如果把郭靖看做被测试对象,那么压力测试就像是郭靖和已经走火入魔的欧阳峰过招,欧阳锋蛮打乱来,毫无套路,尽可能地去打倒对方。郭靖要能应对住,并且不能丢进小命。而常规性能测试就好比郭靖和黄药师、洪七公三人约定,只要郭靖能分别接两位高手一百招,郭靖就算胜。至于三百招后哪怕郭靖会输掉那也不用管了。他只要能做到接下一百招,就算通过。
思考
我们在做软件压力测试时,往往要增加比负载测试更多的并发用户和交易,这是为什么?
3.并发测试
验证系统的并发处理能力。一般是和服务器端建立大量的并发连接,通过客户端的响应时间和服务器端的性能监测情况来判断系统是否达到了既定的并发能力指标。负载测试往往就会使用并发来创造负载,之所以把并发测试单独提出来,是因为并发测试往往涉及服务器的并发容量,以及多进程/多线程协调同步可能带来的问题。这是要特别注意,必须测试的。
4.基准测试
当软件系统中增加一个新的模块的时候,需要做基准测试,以判断新模块对整个软件系统的性能影响。按照基准测试的方法,需要打开/关闭新模块至少各做一次测试。关闭模块之前的系统各个性能指标记下来作为基准(Benchmark),然后与打开模块状态下的系统性能指标作比较,以判断模块对系统性能的影响。
5.稳定性测试
“路遥知马力”,在这里我们要说的是和性能测试有关的稳定性测试,即测试系统在一定负载下运行长时间后是否会发生问题。软件系统的有些问题是不能一下子就暴露出来的,或者说是需要时间积累才能达到能够度量的程度。为什么会需要这样的测试呢?因为有些软件的问题只有在运行一天或一个星期甚至更长的时间才会暴露。这种问题一般是程序占用资源却不能及时释放而引起的。比如,内存泄漏问题就是经过一段时间积累才会慢慢变得显着,在运行初期却很难检测出来;还有客户端和服务器在负载运行一段时间后,建立了大量的连接通路,却不能有效地复用或及时释放。
6.可恢复测试
测试系统能否快速地从错误状态中恢复到正常状态。比如,在一个配有负载均衡的系统中,主机承受了压力无法正常工作后,备份机是否能够快速地接管负载。可恢复测试通常结合压力测试一起来做。
提示:每种测试有其存在的空间和目的。当我们接手一个软件项目后,在有限的资源条件下,选择去做哪一种测试,这应该根据当前软件过程阶段和项目的本身特点来做选择。比如,在集成测试的时候要做基准测试,在软件产品每个发布点要做性能测试。
‘玖’ 现在学C# 好,还是java比较好
华山论剑:C#对Java
(仙人掌工作室 2001年06月29日 17:01)
C#(C-Sharp)是Microsoft的新编程语言,被誉为“C/C++家族中第一种面向组件的语言”。然而,不管它自己宣称的是什么,许多人认为C#更像是Java的一种克隆,或者是Microsoft用来替代Java的产品。事实是否是这样的呢?
本文的比较结果表明,C#不止是Java的同胞那么简单。如果你是一个Java开发者,想要学习C#或者了解更多有关C#的知识,那么本文就是你必须把最初10分钟投入于其中的所在。
一、C#、C++和Java
C#的语言规范由Microsoft的Anders Hejlsberg与Scott Wiltamuth编写。在当前Microsoft天花乱坠的宣传中,对C#和C++、Java作一番比较总是很有趣的。考虑到当前IT媒体的舆论倾向,如果你早就知道C#更接近Java而不是C++,事情也不值得大惊小怪。对于刚刚加入这场讨论的读者,下面的表1让你自己作出判断。显然,结论应该是:Java和C#虽然不是孪生子,但C#最主要的特色却更接近Java而不是C++。
表1:比较C#、C++和Java最重要的功能
功能 C# C++ Java
继承 允许继承单个类,允许实现多个接口 允许从多个类继承 允许继承单个类,允许实现多个接口
接口实现 通过“interface”关键词 通过抽象类 通过“interface”关键词
内存管理 由运行时环境管理,使用垃圾收集器 需要手工管理 由运行时环境管理,使用垃圾收集器
指针 支持,但只在很少使用的非安全模式下才支持。通常以引用取代指针 支持,一种很常用的功能。 完全不支持。代之以引用。
源代码编译后的形式 .NET中间语言(IL) 可执行代码 字节码
单一的公共基类 是 否 是
异常处理 异常处理 返回错误 异常处理。
了解表1总结的重要语言功能之后,请继续往下阅读,了解C#和Java的一些重要区别。
二、语言规范的比较
2.1、简单数据类型
简单数据类型(Primitive)在C#中称为值类型,C#预定义的简单数据类型比Java多。例如,C#有unit,即无符号整数。表2列出了所有C#的预定义数据类型:
表2:C#中的值类型
类型 说明
object 所有类型的最终极的基类
string 字符串类型;字符串是一个Unicode字符的序列
sbyte 8位带符号整数
short 16位带符号整数
int 32位带符号整数
long 64位带符号整数
byte 8位无符号整数
ushort 16位无符号整数
uint 32位无符号整数
ulong 64位无符号整数
float 单精度浮点数类型
double 双精度浮点数类型
bool 布尔类型;bool值或者是true,或者是false
char 字符类型;一个char值即是一个Unicode字符
decimal 有28位有效数字的高精度小数类型
2.2、常量
忘掉Java中的static final修饰符。在C#中,常量可以用const关键词声明。
public const int x = 55;
此外,C#的设计者还增加了readonly关键词。如果编译器编译时未能确定常量值,你可以使用readonly关键词。readonly域只能通过初始化器或类的构造函数设置。
2.3、公用类的入口点
在Java中,公用类的入口点是一个名为main的公用静态方法。main方法的参数是String对象数组,它没有返回值。在C#中,main方法变成了公用静态方法Main(大写的M),Main方法的参数也是一个String对象数组,而且也没有返回值,如下面的原型声明所示:
public static void Main(String[] args)
但是,C#的Main方法不局限于此。如果不向Main方法传递任何参数,你可以使用上述Main方法的一个重载版本,即不带参数列表的版本。也就是说,下面的Main方法也是一个合法的入口点:
public static void Main()
另外,如果你认为有必要的话,Main方法还可以返回一个int。例如,下面代码中的Main方法返回1:
using System;
public class Hello {
public static int Main() {
Console.WriteLine("Done");
return 1;
}
}
与此相对,在Java中重载main方法是不合法的。
2.4、switch语句
在Java中,switch语句只能处理整数。但C#中的switch语句不同,它还能够处理字符变量。请考虑下面用switch语句处理字符串变量的C#代码:
using System;
public class Hello {
public static void Main(String[] args) {
switch (args[0]) {
case "老板":
Console.WriteLine("早上好!我们随时准备为您效劳!");
break;
case "雇员":
Console.WriteLine("早上好!你可以开始工作了!");
break;
default:
Console.WriteLine("早上好!祝你好运!");
break;
}
}
}
与Java中的switch不同,C#的switch语句要求每一个case块或者在块的末尾提供一个break语句,或者用goto转到switch内的其他case标签。
2.5、foreach语句
foreach语句枚举集合中的各个元素,为集合中的每一个元素执行一次代码块。请参见下面的例子。
using System;
public class Hello {
public static void Main(String[] args) {
foreach (String arg in args)
Console.WriteLine(arg);
}
}
如果在运行这个执行文件的时候指定了参数,比如“Hello Peter Kevin Richard”,则程序的输出将是下面几行文字:
Peter
Kevin
Richard
2.6、C#没有>>>移位操作符
C#支持uint和ulong之类的无符号变量类型。因此,在C#中,右移操作符(即“>>”)对于无符号变量类型和带符号变量类型(比如int和long)的处理方式不同。右移uint和ulong丢弃低位并把空出的高位设置为零;但对于int和long类型的变量,“>>”操作符丢弃低位,同时,只有当变量值是正数时,“>>”才把空出的高位设置成零;如果“>>”操作的是一个负数,空出的高位被设置成为1。
Java中不存在无符号的变量类型。因此,我们用“>>>”操作符在右移时引入负号位;否则,使用“>>”操作符。
2.7、goto关键词
Java不用goto关键词。在C#中,goto允许你转到指定的标签。不过,C#以特别谨慎的态度对待goto,比如它不允许goto转入到语句块的内部。在Java中,你可以用带标签的语句加上break或continue取代C#中的goto。
2.8、声明数组
在Java中,数组的声明方法非常灵活,实际上有许多种声明方法都属于合法的方法。例如,下面的几行代码是等价的:
int[] x = { 0, 1, 2, 3 };
int x[] = { 0, 1, 2, 3 };
但在C#中,只有第一行代码合法,[]不能放到变量名字之后。
2.9、包
在C#中,包(Package)被称为名称空间。把名称空间引入C#程序的关键词是“using”。例如,“using System;”这个语句引入了System名称空间。
然而,与Java不同的是,C#允许为名称空间或者名称空间中的类指定别名:
using TheConsole = System.Console;
public class Hello {
public static void Main() {
TheConsole.WriteLine("使用别名");
}
}
虽然从概念上看,Java的包类似于.NET的名称空间。然而,两者的实现方式不同。在Java中,包的名字同时也是实际存在的实体,它决定了放置.java文件的目录结构。在C#中,物理的包和逻辑的名称之间是完全分离的,也就是说,名称空间的名字不会对物理的打包方式产生任何影响。在C#中,每一个源代码文件可以从属于多个名称空间,而且它可以容纳多个公共类。
.NET中包的实体称为程序集(Assembly)。每一个程序集包含一个manifest结构。manifest列举程序集所包含的文件,控制哪些类型和资源被显露到程序集之外,并把对这些类型和资源的引用映射到包含这些类型与资源的文件。程序集是自包含的,一个程序集可以放置到单一的文件之内,也可以分割成多个文件。.NET的这种封装机制解决了DLL文件所面临的问题,即臭名昭着的DLL Hell问题。
2.10、默认包
在Java中,java.lang包是默认的包,它无需显式导入就已经自动包含。例如,要把一些文本输出到控制台,你可以使用下面的代码:
System.out.println("Hello world from Java");
C#中不存在默认的包。如果要向控制台输出文本,你使用System名称空间Console对象的WriteLine方法。但是,你必须显式导入所有的类。代码如下:
using System;
public class Hello {
public static void Main() {
Console.WriteLine("Hello world from C#");
}
}
2.11、面向对象
Java和C#都是完全面向对象的语言。在面向对象编程的三大原则方面,这两种语言接近得不能再接近。
继承:这两种语言都支持类的单一继承,但类可以实现多个接口。所有类都从一个公共的基类继承。
封装与可见性:无论是在Java还是C#中,你都可以决定类成员是否可见。除了C#的internal访问修饰符之外,两者的可见性机制非常相似。
多态性:Java和C#都支持某些形式的多态性机制,且两者实现方法非常类似。
2.12、可访问性
类的每个成员都有特定类型的可访问性。C#中的访问修饰符与Java中的基本对应,但多出了一个internal。简而言之,C#有5种类型的可访问性,如下所示:
public:成员可以从任何代码访问。
protected:成员只能从派生类访问。
internal:成员只能从同一程序集的内部访问。
protected internal:成员只能从同一程序集内的派生类访问。
private:成员只能在当前类的内部访问。
2.13、派生类
在Java中,我们用关键词“extends”实现继承。C#采用了C++的类派生语法。例如,下面的代码显示了如何派生父类Control从而创建出新类Button:
public class Button: Control { . . }
2.14、最终类
由于C#中不存在final关键词,如果想要某个类不再被派生,你可以使用sealed关键词,如下例所示:
sealed class FinalClass { . . }
2.15、接口
接口这个概念在C#和Java中非常相似。接口的关键词是interface,一个接口可以扩展一个或者多个其他接口。按照惯例,接口的名字以大写字母“I”开头。下面的代码是C#接口的一个例子,它与Java中的接口完全一样:
interface IShape { void Draw(); }
扩展接口的语法与扩展类的语法一样。例如,下例的IRectangularShape接口扩展IShape接口(即,从IShape接口派生出IRectangularShape接口)。
interface IRectangularShape: IShape { int GetWidth(); }
如果你从两个或者两个以上的接口派生,父接口的名字列表用逗号分隔,如下面的代码所示:
interface INewInterface: IParent1, IParent2 { }
然而,与Java不同,C#中的接口不能包含域(Field)。
另外还要注意,在C#中,接口内的所有方法默认都是公用方法。在Java中,方法声明可以带有public修饰符(即使这并非必要),但在C#中,显式为接口的方法指定public修饰符是非法的。例如,下面的C#接口将产生一个编译错误。
interface IShape { public void Draw(); }
2.16、is和as操作符
C#中的is操作符与Java中的instanceof操作符一样,两者都可以用来测试某个对象的实例是否属于特定的类型。在Java中没有与C#中的as操作符等价的操作符。as操作符与is操作符非常相似,但它更富有“进取心”:如果类型正确的话,as操作符会尝试把被测试的对象引用转换成目标类型;否则,它把变量引用设置成null。
为正确理解as操作符,首先请考虑下面这个例子中is操作符的运用。这个例子包含一个IShape接口,以及两个实现了IShape接口的类Rectangle和Circle。
using System;
interface IShape {
void draw();
}
public class Rectangle: IShape {
public void draw() {
}
public int GetWidth() {
return 6;
}
}
public class Circle: IShape {
public void draw() {
}
public int GetRadius() {
return 5;
}
}
public class LetsDraw {
public static void Main(String[] args) {
IShape shape = null;
if (args[0] == "rectangle") {
shape = new Rectangle();
}
else if (args[0] == "circle") {
shape = new Circle();
}
if (shape is Rectangle) {
Rectangle rectangle = (Rectangle) shape;
Console.WriteLine("Width : " + rectangle.GetWidth());
}
if (shape is Circle) {
Circle circle = (Circle) shape;
Console.WriteLine("Radius : " + circle.GetRadius());
}
}
}
编译好代码之后,用户可以输入“rectangle”或者“circle”作为Main方法的参数。如果用户输入的是“circle”,则shape被实例化成为一个Circle类型的对象;反之,如果用户输入的是“rectangle”,则shape被实例化成为Rectangle类型的对象。随后,程序用is操作符测试shape的变量类型:如果shape是一个矩形,则shape被转换成为Rectangle对象,我们调用它的GetWidth方法;如果shape是一个圆,则shape被转换成为一个Circle对象,我们调用它的GetRadius方法。
如果使用as操作符,则上述代码可以改成如下形式:
using System;
interface IShape {
void draw();
}
public class Rectangle: IShape {
public void draw() {
}
public int GetWidth() {
return 6;
}
}
public class Circle: IShape {
public void draw() {
}
public int GetRadius() {
return 5;
}
}
public class LetsDraw {
public static void Main(String[] args) {
IShape shape = null;
if (args[0] == "rectangle") {
shape = new Rectangle();
}
else if (args[0] == "circle") {
shape = new Circle();
}
Rectangle rectangle = shape as Rectangle;
if (rectangle != null) {
Console.WriteLine("Width : " + rectangle.GetWidth());
}
else {
Circle circle = shape as Circle;
if (circle != null)
Console.WriteLine("Radius : " + circle.GetRadius());
}
}
}
在上面代码的粗体部分中,我们在没有测试shape对象类型的情况下,就用as操作符把shape转换成Rectangle类型的对象。如果shape正好是一个Rectangle,则shape被转换成为Rectangle类型的对象并保存到rectangle变量,然后我们调用它的GetWidth方法。如果这种转换失败,则我们进行第二次尝试。这一次,shape被转换成为Circle类型的对象并保存到circle变量。如果shape确实是一个Circle对象,则circle现在引用了一个Circle对象,我们调用它的GetRadius方法。
2.17、库
C#没有自己的类库。但是,C#共享了.NET的类库。当然,.NET类库也可以用于其他.NET语言,比如VB.NET或者JScript.NET。值得一提的是StringBuilder类,它是对String类的补充。StringBuilder类与Java的StringBuffer类非常相似。
2.18、垃圾收集
C++已经让我们认识到手工管理内存是多么缺乏效率和浪费时间。当你在C++中创建了一个对象,你就必须手工地拆除这个对象。代码越复杂,这个任务也越困难。Java用垃圾收集器来解决这个问题,由垃圾收集器搜集不再使用的对象并释放内存。C#同样采用了这种方法。应该说,如果你也在开发一种新的OOP语言,追随这条道路是一种非常自然的选择。C#仍旧保留了C++的内存手工管理方法,它适合在速度极端重要的场合使用,而在Java中这是不允许的。
2.19、异常处理
如果你听说C#使用与Java相似的异常处理机制,你不会为此而惊讶,对吧?在C#中,所有的异常都从一个名为Exception的类派生(听起来很熟悉?)另外,正如在Java中一样,你还有熟悉的try和catch语句。Exception类属于.NET System名称空间的一部分。
三、Java没有的功能
C#出生在Java成熟之后,因此,C#拥有一些Java(目前)还没有的绝妙功能也就不足为奇。
3.1、枚举器
枚举器即enum类型(Enumerator,或称为计数器),它是一个相关常量的集合。精确地说,enum类型声明为一组相关的符号常量定义了一个类型名字。例如,你可以创建一个名为Fruit(水果)的枚举器,把它作为一个变量值的类型使用,从而把变量可能的取值范围限制为枚举器中出现的值。
public class Demo {
public enum Fruit {
Apple, Banana, Cherry, Durian
}
public void Process(Fruit fruit) {
switch (fruit) {
case Fruit.Apple:
...
break;
case Fruit.Banana:
...
break;
case Fruit.Cherry:
...
break;
case Fruit.Durian:
...
break;
}
}
}
在上例的Process方法中,虽然你可以用int作为myVar变量的类型,但是,使用枚举器Fruit之后,变量的取值范围限制到了Applet、Banana、Cherry和Durian这几个值之内。与int相比,enum的可读性更好,自我说明能力更强。
3.2、结构
结构(Struct)与类很相似。然而,类是作为一种引用类型在堆中创建,而结构是一种值类型,它存储在栈中或者是嵌入式的。因此,只要谨慎运用,结构要比类快。结构可以实现接口,可以象类一样拥有成员,但结构不支持继承。
然而,简单地用结构来取代类可能导致惨重损失。这是因为,结构是以值的方式传递,由于这种传递方式要把值复制到新的位置,所以传递一个“肥胖的”结构需要较大的开销。而对于类,传递的时候只需传递它的引用。
下面是一个结构的例子。注意它与类非常相似,只要把单词“struct”替换成“class”,你就得到了一个类。
struct Point {
public int x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
3.3、属性
C#类除了可以拥有域(Field)之外,它还可以拥有属性(Property)。属性是一个与类或对象关联的命名的特征。属性是域的一种自然扩展――两者都是有类型、有名字的类成员。然而,和域不同的是,属性不表示存储位置;相反,属性拥有存取器(accessor),存取器定义了读取或者写入属性值时必须执行的代码。因此,属性提供了一种把动作和读取、写入对象属性值的操作关联起来的机制,而且它们允许属性值通过计算得到。
在C#中,属性通过属性声明语法定义。属性声明语法的第一部分与域声明很相似,第二部分包括一个set过程和/或一个get过程。例如,在下面的例子中,PropertyDemo类定义了一个Prop属性。
public class PropertyDemo {
private string prop;
public string Prop {
get {
return prop;
}
set {
prop = value;
}
}
}
如果属性既允许读取也允许写入,如PropertyDemo类的Prop属性,则它同时拥有get和set存取过程。当我们读取属性的值时,get存取过程被调用;当我们写入属性值时,set存取过程被调用。在set存取过程中,属性的新值在一个隐含的value参数中给出。
与读取和写入域的方法一样,属性也可以用同样的语法读取和写入。例如,下面的代码实例化了一个PropertyDemo类,然后写入、读取它的Prop属性。
PropertyDemo pd = new PropertyDemo();
pd.Prop = "123"; // set
string s = pd.Prop; // get
3.4、以引用方式传递简单数据类型的参数
在Java中,当你把一个简单数据类型的值作为参数传递给方法时,参数总是以值的方式传递――即,系统将为被调用的方法创建一个参数值的副本。在C#中,你可以用引用的方式传递一个简单数据类型的值。此时,被调用的方法将直接使用传递给它的那个值――也就是说,如果在被调用方法内部修改了参数的值,则原来的变量值也随之改变。
在C#中以引用方式传递值时,我们使用ref关键词。例如,如果编译并运行下面的代码,你将在控制台上看到输出结果16。注意i值被传递给ProcessNumber之后是如何被改变的。
using System;
public class PassByReference {
public static void Main(String[] args) {
int i = 8;
ProcessNumber(ref i);
Console.WriteLine(i);
}
public static void ProcessNumber(ref int j) {
j = 16;
}
}
C#中还有一个允许以引用方式传递参数的关键词out,它与ref相似。但是,使用out时,作为参数传递的变量在传递之前不必具有已知的值。在上例中,如果整数i在传递给ProcessNumber方法之前没有初始化,则代码将出错。如果用out来取代ref,你就可以传递一个未经初始化的值,如下面这个修改后的例子所示。
using System;
public class PassByReference {
public static void Main(String[] args) {
int i;
ProcessNumber(out i);
Console.WriteLine(i);
}
public static void ProcessNumber(out int j) {
j = 16;
}
}
经过修改之后,虽然i值在传递给ProcessNumber方法之前没有初始化,但PassByReference类能够顺利通过编译。
3.5、C#保留了指针
对于那些觉得自己能够恰到好处地运用指针并乐意手工进行内存管理的开发者来说,在C#中,他们仍旧可以用既不安全也不容易使用的“古老的”指针来提高程序的性能。C#提供了支持“不安全”(unsafe)代码的能力,这种代码能够直接操作指针,能够“固定”对象以便临时地阻止垃圾收集器移动对象。无论从开发者还是用户的眼光来看,这种对“不安全”代码的支持其实是一种安全功能。“不安全”的代码必须用unsafe关键词显式地标明,因此开发者不可能在无意之中使用“不安全”的代码。同时,C#编译器又和执行引擎协作,保证了“不安全”的代码不能伪装成为安全代码。
using System;
class UsePointer {
unsafe static void PointerDemo(byte[] arr) {
.
.
}
}
C#中的unsafe代码适合在下列情形下使用:当速度极端重要时,或者当对象需要与现有的软件(比如COM对象或者DLL形式的C代码)交互时。
3.6、代理
代理(delegate)可以看作C++或者其他语言中的函数指针。然而,与函数指针不同的是,C#中的代理是面向对象的、类型安全的、可靠的。而且,函数指针只能用来引用静态函数,但代理既能够引用静态方法,也能够引用实例方法。代理用来封装可调用方法。你可以在类里面编写方法并在该方法上创建代理,此后这个代理就可以被传递到第二个方法。这样,第二个方法就可以调用第一个方法。
代理是从公共基类System.Delegate派生的引用类型。定义和使用代理包括三个步骤:声明,创建实例,调用。代理用delegate声明语法声明。例如,一个不需要参数且没有返回值的代理可以用如下代码声明:
delegate void TheDelegate();
创建代理实例的语法是:使用new关键词,并引用一个实例或类方法,该方法必须符合代理指定的特征。一旦创建了代理的实例,我们就可以用调用方法的语法调用它。
3.7、包装和解除包装
在面向对象的编程语言中,我们通常使用的是对象。但为了提高速度,C#也提供了简单数据类型。因此,C#程序既包含一大堆的对象,又有大量的值。在这种环境下,让这两者协同工作始终是一个不可回避的问题,你必须要有一种让引用和值进行通信的方法。
在C#以及.NET运行时环境中,这个“通信”问题通过包装(Boxing)和解除包装(Unboxing)解决。包装是一种让值类型看起来象引用类型的处理过程。当一个值类型(简单数据类型)被用于一个要求或者可以使用对象的场合时,包装操作自动进行。包装一个value-type值的步骤包括:分配一个对象实例,然后把value-type值复制到对象实例。
解除包装所执行的动作与包装相反,它把一个引用类型转换成值类型。解除包装操作的步骤包括:首先检查并确认对象实例确实是给定value-type的一个经过包装的值,然后从对象实例复制出值。
Java对该问题的处理方式略有不同。Java为每一种简单数据类型提供了一个对应的类封装器。例如,用Integer类封装int类型,用Byte类封装byte类型。
【结束语】本文为你比较了C#和Java。这两种语言很相似,然而,说C#是Java的克隆或许已经大大地言过其实。面向对象、中间语言这类概念并不是什么新东西。如果你准备设计一种面向对象的新语言,而且它必须在一个受管理的安全环境内运行,你难道不会搞出与C#差不多的东西吗?