




已阅读5页,还剩74页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020 4 25 1 79 VisualStudio NET简介 VS功能VS版本VS体系VS2008特性VS2008UI介绍Demo演示参考文献 2020 4 25 2 79 VS功能介绍 2020 4 25 3 79 VS功能介绍 1 VS功能VisualStudio是一套完整的开发工具 VS2008能创建的应用程序VisualBasic VisualBasic6 0 1998 VisualC VisualC 4 x及以上VisualC VisualStudioWeb设计器传统ASP 2020 4 25 4 79 VS功能介绍 2 VC 项目ATLC CLIMFCWin32SmartDevice 2020 4 25 5 79 VS功能介绍 3 C 项目 CSharp 意为C WinFormsWPFASP NETOfficeWCFWF 2020 4 25 6 79 VS版本 内容版本及功能版本类型 2020 4 25 7 79 VS版本 1 VS两个系列 核心库 VisualStudio6 0 Win32SDK VisualStudio NET NETFrameworkSDK NET版本 2000 6 22 VS2002 NETFrameworkSDK1 0 VS2003 NETFrameworkSDK1 1 VS2005 NETFrameworkSDK2 0 3 0 VS2008 NETFrameworkSDK3 5 VS2010 NETFrameworkSDK4 0 2020 4 25 8 79 VS版本 2 VS2008标准版VS2008 Express Edition Chs 速成版 安装方便 适合学习之用或单语言快速开发 功能有限VS 2008 Professional Edition DVD 专业版 功能完善 适合个人开发者VS2008 Team Edition DVD团队版 用于开发人员 软件生命周期协同管理和性能分析VS2008 Team Suite DVD团队版 集成套件 集成了forSoftwareArchitects forSoftwareDevelopers forSoftwareTesters所有功能的最强大的版本 Visual Studio 2008 Team Foundation Server团队版 服务器端 团队版系列产品均可连接此服务器端 在服务器保存程序数据 协调开发工作 2020 4 25 9 79 VS体系 内容VS技术VS结构NETFramework环境编译过程 2020 4 25 10 79 NET技术路线 2020 4 25 11 79 NET结构 NET包括四个组成部分虚拟对象系统元数据通用语言规范虚拟执行系统 2020 4 25 12 79 NET结构 虚拟对象系统 概念VOS virtualobjectsystem VOS支撑着 net跨语言集成的特性 问题不同语言类型系统之间的相容性 机制VOS提供一个类型丰富的系统来容纳它所支持的各种语言的特性 VOS屏蔽了不同语言类型系统间的转换 2020 4 25 13 79 NET结构 虚拟执行系统 概念VES VisualExecutionSystem VES是VOS的实现 用来驱动运行环境 作用装入中间代码 MSIL 使用JIT将MSIL转换为本地代码 nativecode 装入元数据 代码管理服务 gc和exception 定制与调试服务 线程和环境管理 2020 4 25 14 79 NET结构 元数据 概念Metadata描述数据的数据元数据是CLI组件合同的描述载体 组件平台的 黏合剂 CLI元数据类型定义型元数据 代码中定义了什么引用型元数据 代码中引用了什么特性Attributes 扩展定义新的元数据作用编译器 Metadata ClassLoader JIT智能提示 2020 4 25 15 79 NET结构 通用语言规范 概念CLS CommonLanguageSpecification CLS是CLR定义的语言特性集合 CLS主要用来解决互操作问题 相关术语CLICTS 2020 4 25 16 79 各种术语关系 2020 4 25 17 79 通用类型系统 CTS 值类型 ValueType类引用类型 Object类 2020 4 25 18 79 CTS 类型 值类型值类型直接包含它们的数据 值类型的实例要么在堆栈上 要么内联在结构中 值类型可以是内联的 用户定义的或枚举的 引用类型存储对值的内存地址的引用 位于堆上 是自描述类型 类 数组 指针类型或接口类型 类类型是用户定义的类 装箱的值类型和委托 区别作为值类型的变量 每个都有自己的数据副本 因此对一个变量的操作不会影响其他变量 作为引用类型的变量可以引用同一对象 因此对一个变量的操作会影响另一个变量所引用的同一对象 2020 4 25 19 79 CTS 值类型 2020 4 25 20 79 NETFramework环境 简单的开发和部署统一的编程模型支持多种编程语言丰富的类库支持 2020 4 25 21 79 架构 语言 工具 2020 4 25 22 79 统一的编程模型 WindowsAPI 2020 4 25 23 79 公共语言运行库 CLR 概念CommonLanguageRuntime负责执行托管代码过程 cpp等源文件编译成MSIL 它定义了要由CLR执行的指令 CLR中的编译器将MSIL编译成在特定平台上运行的机器码 创建出独立的应用程序 两步走确保不同的操作系统之间的可移植性语言之间的互操作性MSIL执行期间的管理特性 内存管理和安全管理 2020 4 25 24 79 公共语言运行时 ClassLoader MSIL到本地代码编译器 CodeManager 垃圾收集器 安全引擎 调试 TypeChecker 异常管理 线程支持 COMMarshaler NETFramework类库支持 2020 4 25 25 79 公共语言运行 总结 公共语言运行库管理内存 线程执行 代码执行 代码安全验证 编译以及其他系统服务 运行库实现通用类型系统 CTS 运行库解决了两个最常见的应用程序错误 内存泄漏和无效内存引用 运行库简化了各种开发语言之间的互操作 运行库从不解释托管代码 而是通过实时 JIT 编译来生成本机代码 代码管理的概念是运行库的基本原则 以运行库为目标的代码称为托管代码 而不以运行库为目标的代码称为非托管代码 2020 4 25 26 79 编译和执行 源代码 编译 中间代码 元数据 2020 4 25 27 79 编译执行 2020 4 25 28 79 代码执行过程 编译器 语言编译器VisualBasic vbc exeC csc exeVisualC cl exeJScript jsc exe第三方编译器 Eiffel Perl COBOL 公共语言运行库CLR是一个多语言执行环境 语言编译器将确定可用的运行库功能 2020 4 25 29 79 代码执行过程 中间语言 MSIL MicrosoftIntermediateLanguage 当编译为托管代码时 编译器将源代码翻译MSIL MSIL可以有效地转换为本机代码且独立于CPU的指令 MSIL汇编程序 ILdasm exe ILDisassembler MetaData当编译器产生MSIL时 它也产生元数据 元数据描述代码中的类型 包括每种类型的定义 每种类型的成员的签名 代码引用的成员和运行库在执行时使用的其他数据 PE PortableExecutable可移植可执行 文件通用对象文件格式 COFF PE文件格式包含MSIL或本机代码以及元数据 PE使得操作系统能够识别公共语言运行库映像 PE文件中的元数据以及MSIL的存在使代码能够描述自身 2020 4 25 30 79 代码执行过程 将MSIL编译为本机代码 两种编译器 NETFramework实时 JITjust in time 编译器 实时编译器将MSIL转换为特定于CPU的代码 CLR为它支持的每种计算机结构都提供了一种或多种JIT编译器 同一组MSIL可以在所支持的任何结构上JIT编译和运行 NETFramework本机映像生成器 Ngen exe 它在应用程序运行之前而不是运行过程中执行从MSIL到本机代码的转换 它一次编译一个整个的程序集 而不是一次编译一个方法 它将本机映像缓存中生成的代码以文件的形式持久保存在磁盘上 2020 4 25 31 79 VS2008特性 设计目标在WindowsServer2008 Vista和office2007下最好的开发工具集 功能特性AzureWPF WCP WWF CardSpaceLinQ Ajax 2020 4 25 32 79 VS2008UI介绍 内容VC 发展UI设计C CLI语言集成 互操作 2020 4 25 33 79 VisualC NET C 20世纪70年代 72年 BCPL和B标准CC 20世纪80年代初C的一个超集标准C VisualC 20世纪90年代初Microsoft对c 的一个特定的实现MicrosoftFoundationClassVisualc netMC C CLI 2020 4 25 34 79 VisualC 的版本与平台 2020 4 25 35 79 用VisualC NET的开发范围 2020 4 25 36 79 VC UI VC 的UI设计MFC C WinForms C CLI VB C WPF C VB 互操作ISO C MC C CLIC 2020 4 25 37 79 MFC 概念MFC库是类的一个庞大集合 作用是帮助Visualc 程序员创建功能强大的 基于Windows的应用程序 用途常用来开发非托管代码 即不利用 NETFramework的代码 版本MFC6 0 MFC7 0 NET平台 趋势MFC WinForm WPF 2020 4 25 38 79 WinForm 概念一个windows窗体设计器 它是一个可视化编程工具 能极大地简化GUI和数据库编程 好处增强了软件的互操作性 不同语言的软件组建版本 net平台2002 2003 2005 2008 2010趋势MFC WinForm WPF 2020 4 25 39 79 WPF WPF的全称是WindowsPresentationFoundation 是微软新发布的Vista操作系统的三大核心开发库之一 其主要负责的是图形显示 所以叫Presentation 呈现 作为新的图形引擎 WPF是基于DirectX的 当然增加了很多新的功能首先 它清晰而又有效的将用户界面和程序实现分开 WPF使用一种基于XML的语言来定义用户界面从而完成上述的工作 这种语言被称为XAML XML应用程序标记语言 其次 WPF使用一种基于向量而不是基于光栅的绘制引擎 这与的Windows的绘制引擎是截然不同的 2020 4 25 40 79 比较 一 MFC生成本机代码 自然是很快 可是 消息循环 减缓了界面显示速度 winForm封装了win32的api 多次进行P invoke操作 大部分使用p invoke操作封装 速度慢 WPF是一种新的模型 不再使用win32模型 自己新建模型 使用dx作为新的显示技术 直接访问驱动程序 加快了运行速度 可是 这种模型 需要支持dx9的显卡 硬件要求高 2020 4 25 41 79 比较 二 开发效率上MFCWPF winForm用MFC开发成本太高 对开发者能力要求更高 界面执行效率上MFC WPF winform随着计算机硬件的性能提高 多核cpu的普及 它们的差距会越来越小开发灵活性上WPF MFC winForm美观上WPF winForm MFC内存使用上WPF winForm MFC使用范围WPF MFC winForm 2020 4 25 42 79 C CLI语言 第一个C CLI程序C CLI托管对象模型ISO C 与C CLI的集成 2020 4 25 43 79 第一个C CLI程序 inclued预编译指令指示编译器将一个指定文件的内容视为已经插入当前位置 并替换掉 inclued语句 Stdafx h它是由VS生成的 引用了许多有用的 现成的代码 using预处理器指令应用了预包装的代码单元如mscorlib dll将数据 dll 导入到一个程序 using using指令声明申明程序要使用的命名空间 2020 4 25 44 79 第一个C CLI程序 追踪句柄 VS 指针 String msg C CLI版string pMsg ISO C 版分析追踪句柄是指向 托管堆上一个完整的对象 的指针为什么不直接采用ISO C 指针的表示法 内容决定形式 形式反映内容 垃圾收集导致对象地址的不稳定 指针的变化主要是由于托管堆的引入 所有牵扯到托管堆的指针都改变了形态和语义 2020 4 25 45 79 第一个C CLI程序 gcnewVS newmsg gcnewString Hello World pMsg newstring Hello World deletemsg 仅仅用来调用析构函数以释放非托管资源 托管内存资源交由垃圾收集器负责 调用可选 deletepMsg 不仅用来调用析构函数 同时也用来施放对象内存 必须调用 否则造成内存泄漏 2020 4 25 46 79 C CLI语法 C MC C CLIMC 声明Public gcclassPerson 引用类Public valueclassVector 值类Public interfaceIMyFile 接口类C CLI声明PublicrefclassManagedPerson 托管类PublcivalueclassVector PublicinterfaceclassIMyFile PublicclassNativePerson 本地类PublicenumclassE 2020 4 25 47 79 C CLI托管对象模型 概念对象模型C CLI对象模型本地C 对象模型程序存储区代码区静态数据区动态数据区 堆和栈 C CLI指针追踪句柄内部指针固定指针 2020 4 25 48 79 对象模型 概念是类型实例在机器 虚拟机 中的表示形式上体现为指针作用对象模型是深刻认识现代面向对象 组件编程语言的根本 C CLI对象模型 本地C 对象模型 2020 4 25 49 79 堆 概念堆又名自由存储区 系统用链表来存储的空闲内存地址链 大小受限于计算机系统中有效虚拟内存 对象生命周期不会随方法执行完毕而消亡 优缺点由new分配的内存 速度较慢 容易产生内存碎片 但使用方便 分类托管堆本地堆 2020 4 25 50 79 托管堆VS本地堆 本地堆本地堆是相对于 NET中的托管堆而言的 本地堆上的对象生命周期全部由程序员负责 在C 中表现为new操作符和delete操作符 托管堆托管堆上的对象生命周期部分地由垃圾收集器负责 在VC 2005及以上版本中可以用gcnew来在托管堆上为对象分配内存 对象内存的释放需要由垃圾收集器来负责 程序员也可以手动释放内存 2020 4 25 51 79 栈 概念由编译器自动分配与释放 一块连续的存储空间 2M 线性结构 栈 存放的对象式函数的参考值 局部变量等 栈的剩余空间大于所申请空间 系统将为程序提供内存 栈上的对象生命周期一般比较短 方法执行结束后 栈会被清空 其上所有的对象都会随之而消亡 优缺点由系统自动分配 速度较快 程序员无法控制 2020 4 25 52 79 栈对象的分配 ManagedClassmyObject 在ISO C 中 myObject被分配于栈上 在C CLI中 myObject的分配依赖于类型系统 值类型 valueclass 分配在栈上 引用类型 refclass 分配在托管堆上引用类 ref 和值类的区别它们的存储位置不同 值类型实例直接包含实例数据 通常位于方法的栈上 它们会随着方法调用后栈空间的消亡 而自动清除 引用类型实例则位于托管堆上 要想访问它们必须通过间接的追踪句柄来访问 其生命周期是全局性的 对象的释放由垃圾收集服务负责 值类型可以通过装箱和拆箱操作来在栈和托管堆上进行转换 2020 4 25 53 79 栈对象的消亡 ManagedClassmyObject 在ISO C 中 在清空栈空间时 会自动调用ManagedClass的析构函数 并且myObject在栈上的空间也随之被释放在C CLI中 在清空栈空间时 也会自动调用ManagedClass的析构函数 但myObject要视ManagedClass的类型来定 如果是valueclass 那么其空间会随之被释放 如果是refclass 那么其在托管堆上的内存要交给垃圾收集器来处理 2020 4 25 54 79 CLI对象模型 内存分配 2020 4 25 55 79 C CLI指针 指针类型追踪句柄trackinghandle 托管堆上一个完整对象 wholeobject 的引用内部指针Interiorpointer包含本地指针 本地指针的超级固定指针Pinningpointer 2020 4 25 56 79 追踪句柄 说明内存中占用8字节4字节TypeHandle4字节SyncblkIndex 2020 4 25 57 79 内部指针 内部指针托管堆上内部对象的地址IL提供了这种表示 C 没提供C CLI为系统级语言 可以指向引用句柄值类型或者装箱值类型句柄托管类型内部成员托管数组内部元素 2020 4 25 58 79 固定指针 说明Gc搬移对象参数传递时启动gc时出现问题采用固定指针告诉gc这块区域不可以搬移 可以指向与内部指针相同 2020 4 25 59 79 对象内存分配情况 2020 4 25 60 79 C CLI与ISO C 的集成 C CLI集成技术简介代码 函数的集成对象模型的集成 2020 4 25 61 79 C CLI非托管互操作 C CLI支持三个级别地代码重用 NET框架支持的模块级的重用 P Invoke调用DLL中的unmanaged函数适合于只有DLL而没有源代码的情况组件级的重用 COM互操作TIBimp exeC CLI单独支持的互操作源代码级的重用 C interop 2020 4 25 62 79 一些有关C CLI的问题 一个CLI托管类型能够继承一个本地类型 一个CLI托管数组能够有多个本地类型实例 一个本地类型能够实现多个CLI接口 一个本地类型能够使用CLR的垃圾收集服务 一个在ISO C 中抛出的异常能够在CLI中被捕获 2020 4 25 63 79 C CLI中集成技术 这些问题的答案实际上就是C CLI的集成技术所做的选择 C CLI对于ISO C 采取了 集成 而非 替换 的策略 为基于ISO C 的静态程序设计和基于CLI的动态程序设计建立一座互通互联的桥梁 C CLI的集成既不是让CLI全盘替换ISO C 也不是将两者全盘融合 亦不是让二者完全孤立并存 而是有所为 有所不为的融合集成 2020 4 25 64 79 C CLI中集成的几个方面 代码和函数的集成变量 表达式 操作符号 类型转换 语句 异常 函数调用类型的集成类型继承 类型修饰 类型成员 构造与析构 参数化类型 模板 泛型 对象模型的集成内存管理 对象包含 对象布局 对象多态 指针与引用 2020 4 25 65 79 最简单的一个集成 inclued预编译指令指示编译器将一个指定文件的内容视为已经插入当前位置 并替换调 inclued语句 Stdafx h它是由VS生成的 引用了许多有用的 现成的代码 using预处理器指令应用了预包装的代码单元如mscorlib dll将数据 dll 导入到一个程序 using using指令声明申明程序要使用的命名空间 2020 4 25 66 79 C CLI与ISO C 形式区别 ISO C C CLI 2020 4 25 67 79 IJW itjustworks 技术 IJW技术保证了所有的ISO C 代码经过CL CLI编译后行为保持不变在将ISO C 代码和CLI代码混合时 IJW技术同样保证ISO C 代码的行为保持不变绝大多数ISO C 代码编译后将得到托管代码 即IL代码 部分不能编译为IL代码的采用P Invoke调用实现IJW使用IL代码来表达ISO C 语言的行为 2020 4 25 68 79 代码演示 1 用CL CLR编译ISO C 代码代码编译过程汇编 2020 4 25 69 79 代码演示 2 用CL CLR编译混合代码代码编译过程汇编 actor new 2020 4 25 70 79 代码演示 3 异常处理的集成代码编译过程汇编 filter catch 2020 4 25 71 79 本地类型的简单集成 IJW对简单类型采用透明的集成策略 所有ISO C 中的简单类型在CLI中被同样对待 具有同样的行为 IJW将ISO C 本地自定义类型编译为ValueType的子类型 IJW通过全局函数来实现ISO C 本地类型的成员函数 IJW通过对类型实例中的位操作 来访问ISO C 中本地类型的数据成员 C CLI对类型集成采取比较保守的策略 ISO C 类型系统和CLI类型系统仍然保持各自独立 2020 4 25 72 79 代码演示 4 本
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 自助服务平台技术方案
- 诸暨玻璃景观台施工方案
- 枣庄钢厂铸石板施工方案
- 建筑强排方案设计课程
- 2025年春季英语四六级听力短对话专项训练试卷
- 航空航天工艺流程解读
- 社区工作人员模拟题库附参考答案详解(突破训练)
- 产品质量检验与改进方案品质管理实践手册
- 2025年执业药师之《药事管理与法规》试题参考答案详解
- 2024施工员考试综合练习(模拟题)附答案详解
- 2025秋二年级上册语文上课课件 快乐读书吧:读读童话故事
- 皮具开发部管理制度
- 2025年高考英语全国二卷重点核心词汇归纳总结(复习必背)
- powerbi考试题及答案
- 2025公需课《人工智能赋能制造业高质量发展》试题及答案
- 涉嫌强奸和解协议书
- 红字发票折让协议书
- 智慧中小学培训
- 《中国进口牛肉评估》课件
- 小学音乐人音版三年级上册维也纳的音乐钟教案
- 流产补偿协议合同
评论
0/150
提交评论