背景:为了解决不同的操作系统、开发平台、运行框架、开发技术的不兼容性。微软公司借助.NET框架将windows下各种应用程序开发有机地集成起来,未开发人员提供统一的开发接口和类库
软件发展过程中,不断有各种新的技术产生,也有落后技术淘汰,从而很多技术无法集中
问题有:
图形图像开发 | GDI、DirectX、OpenGL等三种模式,互不兼容 |
---|---|
数据库 | ADO、DAO、RDO、ODBC等四种模式,互不兼容 |
网站开发技术 | ASP、JSP等两种语言,互不兼容 |
Windows | 服务器版,专业版,Home版等多种不完全兼容的版本 |
刚开始有人使用COM组件解决这些问题(利用面向对象思想),通过接口的方式来达到更多的模块重用和统一接口,但是存在版本管理、组件部署、组件继承的方面的缺陷,所以就没有采用
COM组件:
**(1)**COM component(COM组件)是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。
(2)在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。
由此带来的好处是多方面的:
**为了解决这问题:**微软推出了——Microsoft .NET Framework
**定义:**灵活稳定,能够运行web服务和Windows程序的Windows内置组件,是软件的运行环境,也是软件开发和存在的基础
特性:
3. 发展
.NET的全名叫:.NET Framework(.NET框架)
在2001年微软发布了.NET的第一个版本,十年后,被接受认可,经历了6个版本的迭代更新
注意:1.0和1.1是完全独立版本,它不能与后面的版本兼容,其他版本可以向后兼容
平台无关性:是.NET重要特性之一,公共语言运行库是实现这一目标的核心组件,提供应用程序最基本的运行环境
通过公共语言规范定义统一的.NET框架开发语言
1. 公共语言规范——CLS
**(1)定义:**规定了所有应用程序都需要的最小的语言功能集合,使得支持编写CLS的开发语言所编写的代码都可以在.NET框架运行
l 公共运行库通过定义公共语言规范(CLS)实现.NET的平台无关性、以及跨语言编程
l 所有代码都应该遵守通用类型系统(CTS)和公共语言规范(CLS)
(2)内容:
命名规则:
数据类型:支持基本的基元类型(char int 等);支持数组和枚举,类和接口;类成员可见性必须支持私有,继承,公开三种
类成员:
**接口成员:**接口成员不能有访问性,可以包括字段、属性、方法和事件
异常处理:必须支持异常处理并且异常可以继承,从而实现自定义异常
**事件支持:**事件必须可以动态发布和订阅,事件必须具有唯一的名称
泛型支持:泛型名称必须包含泛型的具体类型参数(也必须满足CLS规定),可以支持对类型进行约束
注意:符合CLS规范的开发语言:C#和VB.NET
公共语言运行库 和 公共语言规范 是.NET实现语言和跨平台的基础
问题:如何让满足CLS的高级语言统一到一起,实现跨平台?——MSIL
MSIL:
(1) **定义:**微软中间语言(MSIL),这是一种符合CLS且风格像汇编的中级语言
问题:为什么叫中级语言?
因为它只是一些模拟的高效的低级指令组成,不像汇编语言,可以和硬件指令紧密结合
通过.NET开发的应用程序能成为在计算机上可以执行的程序的步骤:
总结:任何执行于.NET框架上的高级语言都必须提供对应的编译器和链接器,以便将对应的源代码生成为MSIL代码;.NET应用程序实际保存的是MSIL中间代码,而不是直接运行于操作系统上的二进制机器代码
.NET的目标之一:改变多种开发语言各自为政,相互类型上不完全兼容的问题——实现跨语言编程
多种语言想要进行相互交互,必须定义统一的语言规范
.NET框架通过公共语言规范(CLS)实现跨语言编程,公共语言规范定义了所有可以在.NET框架上运行的代码所必须满足的基本节接口。
(2)开发语言
C# | 微软专门为**.NET打造的面向对象开发语言,简洁,安全,只有**90个关键字,使用C/C++或java大部分语法习惯,简化了C++复杂性 |
---|---|
VB.NET | Visual Basic .NET属Basic系语言 语法特点:是以极具亲和力的英文单词为基础标识,以及与自然语言极其相近的逻辑表达,有时候你会觉得写VB.NET代码就好像在写英文句子一样,从这个角度来说,VB.NET似乎是最高级的一门编程语言, 当然在Basic系语言中VB.NET也确实是迄今为止最强大的一门编程语言。 |
VC++ .NET | ----- |
(2) C#与Visual Studio结合,提出了以下更新机制来加快软件的设计和编码
委托(Delegate) | (1)封装好的函数指针,支持多个函数指针顺序调用 (2)是事件机制和函数回调的基础 |
---|---|
属性(Property) | 对一个或多个私有字段访问的封装,是进行数据隐藏和安全访问的基础 |
属性(Attribute) | 提供关于运行时类型的声明性元数据 比如可以通过FlagsAttribute属性将一个枚举定义或是按位存储减少存储空间 |
内联XML文档注释 | 是一种XML格式的代码注释,结合Visual Studio 的类设计器和代码编辑环境,可以加快类设计,增强代码可读性 |
指针和不安全代码机制 | 用在直接内存访问必不可少的情况下,进行一些内存操作 |
没有头文件和源文件概念 | 对类、接口、委托、方法、字段、属性等定义的位置和顺序没有要求,数量上也没有任何限制 |
程序集:为了解决模块版本不一致的问题
**定义:**程序集通常以一个动态链接库(DLL)的形式存在,包括公共语言运行执行的代码,形成安全边界、类型边界、引用范围边界和版本边界。
特点:可以被其他程序集引用,实现模块重用
用途:进行模块级别的划分,将相互关联的代码放在同一个程序集中,为他需要的使用的模块 或 应用程序提供及接口,便于重用
在同一个程序集中,命名空间用于细致的划分,同一接口的不同实现用不同的命名空间
命名空间:
每个.NET程序集包含一个或多个命名空间
定义:命名空间是一种用于准确定位数据类型的技术,通过命名空间层层定位,可以明确地找到具体要使用的数据类型。
特点:一个命名空间可以包含具体类型和子命名空间
eg:System.Threading.Timer 和System.Windows.Forms.Timer 都是类型Timer
但是前者是线程命名空间,后者是命名空间
.NET可以根据命名空间找到两个具有相同名字的类型,避免混淆
如果程序中的数据类型是文件,那么命名空间就是文件夹
一、 垃圾回收机制
**(1)定义:**自动内存管理,用来自动追踪内存对象,并在不需要的时候自动释放内存
开发人员不需要关心内存释放
(2)在.NET中所有的对象都是引用,每一个引用具有一个引用计数器:表示该对象现在被多少个引用所引用
第一次分配对象,引用计数器为1
(3)公共运行库本身控制着垃圾回收器的周期性执行,每次回收器执行都会扫描当前被应用程序分配的对象
如果引用计数器为0;则表示不再被引用,即可销毁,垃圾回收器自动释放对象所占用的内存
(3) 优点:
.NET为开发人员提供了显式控制垃圾回收器的接口,可以明确通知垃圾回收器马上进行内存清除,以便马上释放内存(垃圾回收器自动释放有延迟)
类型 | 说明 |
---|---|
基本数据类型 | System空间提供了应用程序必备的数据类型 |
集合类 | System.Collection提供最常用的集合类,包括列表、字典、哈希表等 |
IO操作数类库 | System.IO提供IO操作相关类库,封装串口的访问、文件和目录的访问等 |
Windows 用户界面类库 | System.Windows包含所有Windows窗体程序所需要的类:Windows窗体(Form)和Windows窗体控件(Contorls)、界面操作的类 |
ADO.NET类库 | 新型数据库访问模式,由System.Data提供支持(很重要) |
LINQ类库 | System.Linq提供操作 |
多线程相关类库 | System.Threading提供,包括线程创建和使用、线程同步机制、定时器等 |
Internet开发相关类库 | System.Net提供TCP/IP网络开发类库 |
ASP.NET Web控件类库 | System.Web提供Web页面开发的类库,包括邮件服务、页面缓存、Web页面控件等 |
还有很多的类库,可以资讯查询