已阅读5页,还剩46页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DEV353.NETFramework更高效开发,李琪开发合作经理平台及开发合作部微软(中国)有限公司,WhyThisTalk?,大部分的文档和资源只关注技术本课程关注如何更好的应用.NET经验、技巧、工具、应用、设计指导目的在于增强你的开发效率除特殊声明外MicrosoftVisualBasic和VisualC#都适用,WinCV,类似头文件的类型信息C:ProgramFilesMicrosoftVisualStudio.NET2003SDKv1.1BinWinCV.exe,WinCV,.NET深藏的秘密智能感知基本数据类型其他方法快速参考节省在msdn上搜索的时间可以自定义的装配列表WinCV.exe.config为大型项目节省时间,转到定义:VisualStudio2005,VisualStudio2005内建WinCV式的类型信息公共成员包括注释包括属性,VisualStudio2005代码定义窗口(CodeDefinitionWindow),常量定义视图保持当前的文档只读,WinDiff,比较和分析文件的不同点单个文件或整个目录智能的比MicrosoftVisualSourceSafe比较器更好,隐藏速度,自定义自动隐藏速度工具|选项|常规,多工程启动,在一个解决方案中同时启动多个项目同一个debug会话(Startbutton,F5)Solution|Properties|StartupProject,链接文件,链接方式开启文件以引用方式编译,而不拷贝文件例如:SolutionInfo.cs,共享的文件:snk文件版本信息安全策略版权信息公司名等,解决方案目录,通常一个解决方案包含多个项目解决方案文件不应被包含在任何一个特定的项目中更多|创建解决方案的目录其他方法文件|新建|空白解决方案,外部工具集成,自动化引用外部工具ILDasmGacUtil传递VS的宏变量,将警告视为错误,项目属性|配置属性|生成把警告等级设置成4发布之前必经步骤对debug也非常有用,可拖拽的对象,WindowsForm,WebForm,WebServices都可以接收多拽对象SQL表格/数据源生成adaptor,connection,command,dataset,binding等对象组件事件日至,目录监视器,计时器,等等,ImportsSystem.ComponentModelPublicClassMyDataAccessInheritsComponentEndClass,可拖拽的对象,通过组件,为自定义类添加拖拽支持System.ComponentModel用完后可去除继承VisualStudio显示不同的图标,矩形选择,选取前,先按住ALT键去除命名空间和重复的定义时特别有用,文档大纲,按层次浏览对象支持MicrosoftASP.NETforms,HTML,XML对复杂的文件很有用视图|其他窗口|文档大纲,搜索隐藏文本,缺省情况下,搜索和查找替换并不针对收起的文本简单的方法改变默认值VisualStudio2005搜索和查找替换默认包括收起的文本,条件编译,编译时不执行的方法调用没有定义条件System.Diagnostics,#ConstMySpecialCondition=TrueusuallyDEBUGClassSomeClass_publicSubSomeMethod()EndSubEndClassClientsidecodeDimobjasSomeClassobj=newSomeClass()Thislineisconditionalobj.SomeMethod(),事件访问器,使用添加/删除accessors,而不是直接访问成员事件类似属性提倡封装和松耦合VisualC#2002-2005仅VisualBasic2005,事件访问器,publicclassMyPublisherEventHandlerm_MyEvent;publiceventEventHandlerMyEventaddm_MyEvent+=value;removem_MyEvent-=value;,事件访问器,PublicClassMyPublisherEventm_MyEventAsEventHandlerPublicCustomEventMyEventAsEventHandlerAddHandler(ByValvalueAsEventHandler)AddHandlerm_MyEvent,valueEndAddHandlerRemoveHandler(ByValvalueAsEventHandler)RemoveHandlerm_MyEvent,valueEndRemoveHandlerRaiseEvent(ByValsenderAsObject,ByValeaAsEventArgs)RaiseEventm_MyEvent(sender,ea)EndRaiseEventEndEventEndClass,事件访问器,使用“正常的”事件追加语法,MyPublisherpublisher=newMyPublisher();publisher.MyEvent+=newEventHandler(OnMyEvent);voidOnMyEvent(objectsender,Eventargsargs).DimpublisherAsNewMyPublisher()AddHandlerpublisher.MyEvent,AddressOfOnMyEventSubOnMyEvent(ByValsenderAsObject,ByValargsAsEventargs).EndSub,Windows窗体透明,所有的可见倥件都有透明属性0-100%可视化效果,Windows窗体透明,渐暗窗体组合计时器和Close事件,线程命名不是必须,但是对于debug非常有用,ImportsSystem.ThreadingDimcurrentThreadAsThread=Thread.CurrentThreadDimthreadNameAsString=MainUIThreadcurrentThread.Name=threadName,ThreadName,线程名断点(.NET1.1),用线程名作为中断条件设置条件中断使用完全限定类型,线程名中断(.NET2.0),设置断点过滤默认禁用工具|选项|调试|常规|起用断点过滤,结束进程,不要调用Abort()线程需要被清除Abort()不能彻底清除线程方法需要检查标志保护性的互斥标志Kill()方法需要设置标志,并等待进程终结Abort()还有一个缺陷线程可能在catch中进行未定义的处理,publicclassWorkerThread:IDisposableprotectedThreadm_ThreadObj;protectedboolm_EndLoop;protectedMutexm_EndLoopMutex;protectedboolEndLoopsetm_EndLoopMutex.WaitOne();m_EndLoop=value;m_EndLoopMutex.ReleaseMutex();getboolresult=false;m_EndLoopMutex.WaitOne();result=m_EndLoop;m_EndLoopMutex.ReleaseMutex();returnresult;publicWorkerThread()m_EndLoop=false;m_ThreadObj=null;m_EndLoopMutex=newMutex();,publicclassWorkerThread:IDisposablepublicvoidStart()m_ThreadObj=Thread.CurrentThread;inti=0;while(EndLoop=false)/doworkhere/Killiscalledonclientthread-mustusecachedthreadobjectpublicvoidKill()Debug.Assert(m_ThreadObj!=null);if(m_ThreadObj.IsAlive=false)return;EndLoop=true;/Waitforthreadtodiem_ThreadObj.Join();if(m_EndLoopMutex!=null)m_EndLoopMutex.Close();/RestofWorkerThread,编码标准,务必要使用广泛接受的编码标准命名约定和风格编码实践工程设置和结构Framework特定的指导建议少问为什么减少害处IDesign编码标准,标准,导入/导出设置,工具|导入/导出设置,导入/导出设置,支持团队设置文件模糊导入自动应用新版本的设置,语言版本,可以限定VisualC#的版本生成|高级默认VisualC#2.0ISO-1VisualC#1.0(VisualStudio2002)多平台,接口分解与设计,这是好的设计么?,这是好的设计么?,接口分解与设计,这是好的设计么?,接口分解与设计,平衡模块大小与集成度,接口分解与设计,从可重用的角度考虑接口分解问题例如:“狗”接口需求:叫捡户口号打过预防针,接口分解与设计,可以这样定义IDog这种设计并没有很好的分解接口Bark()和Fetch()的关联性更强,publicinterfaceIDogvoidFetch();voidBark();longVetClinicNumberget;set;boolHasShotsget;set;publicclassPoodle:IDogpublicclassGermanShepherd:IDog,接口分解与设计,更好的分解方式,publicinterfaceIPetlongVetClinicNumberget;set;boolHasShotsget;set;publicinterfaceIDogvoidFetch();voidBark();publicinterfaceICatvoidPurr();voidCatchMouse();publicclassPoodle:IDog,IPetpublicclassSiamese:ICat,IPet,接口分解与设计,publicinterfaceIMammalvoidShedFur();voidLactate();publicinterfaceIDog:IMammalvoidFetch();voidBark();publicinterfaceICat:IMammalvoidPurr();voidCatchMouse();,层次划设计逻辑上关联且重复的方法,接口分解与设计,InterfaceFactoringMetrics,接口分解是其包含的方法更少平衡对立面过于细腻的接口vs.过于粗糙的分解,InterfaceFactoringMetrics,可能出现只有一个成员的接口,但是应该尽量避免Dullfacet过多的参数过于粗糙:应被分解为多个接口分解到多个已有接口理想的成员数量最多不要超过20(12),InterfaceFactoringMetrics,方法、参数和属性的比例接口中的方法应比属性多搞好完全封装比值至少2:1异常是只有属性的接口不应有方法避免定义时间,.NETFactoringMetrics,对300+接口设计统计平均,3.75方法/接口方法/属性比例3.5:1事件成员的比例小于3%Onaver
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电子绝缘材料试制工操作规程水平考核试卷含答案
- 公司氯乙烯装置操作工岗位合规化技术规程
- 公司彩灯艺术设计师岗位安全技术规程
- 医疗机构医学影像科委托协议书
- 航空安全考试题库与答案
- 硕士之路介绍
- 硕士考试成功之道
- 部编版五年级语文上册《圆明园的毁灭》同步练习(含答案)
- 贵州国企招聘2025贵州仟山农林开发(集团)有限公司招聘14人笔试历年参考题库附带答案详解
- 2025四川长虹电子控股集团有限公司招聘13人笔试历年参考题库附带答案详解
- 《HSK标准教程2》第6课课件
- 心理咨询师模拟题库与答案
- 排除危石工程施工合同
- 就业指导课专题之简历制作
- GB/T 9124.2-2019钢制管法兰第2部分:Class系列
- GB/T 19949.2-2005道路车辆安全气囊部件第2部分:安全气囊模块试验
- GA/T 1674-2019法庭科学痕迹检验形态特征比对方法确认规范
- FZ/T 64012-2013卫生用水刺法非织造布
- 奥的斯DCSS5门机调试说明
- R32装置操作规程课件
- 地产公司适老化产品设计指引操作手册
评论
0/150
提交评论