(1)C#基础——.NET 框架

第一章 .NET框架

背景:为了解决不同的操作系统、开发平台、运行框架、开发技术的不兼容性。微软公司借助.NET框架将windows下各种应用程序开发有机地集成起来,未开发人员提供统一的开发接口和类库

1.1 .NET的产生和发展

1.1.1产生

软件发展过程中,不断有各种新的技术产生,也有落后技术淘汰,从而很多技术无法集中

问题有:

图形图像开发 GDI、DirectX、OpenGL等三种模式,互不兼容
数据库 ADO、DAO、RDO、ODBC等四种模式,互不兼容
网站开发技术 ASP、JSP等两种语言,互不兼容
Windows 服务器版,专业版,Home版等多种不完全兼容的版本

刚开始有人使用COM组件解决这些问题(利用面向对象思想),通过接口的方式来达到更多的模块重用和统一接口,但是存在版本管理、组件部署、组件继承的方面的缺陷,所以就没有采用

COM组件:

**(1)**COM component(COM组件)是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。

(2)在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。

由此带来的好处是多方面的:

  • 可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;
  • 可以在多个应用系统中重复利用同一个组件;
  • 可以方便的将应用系统扩展到网络环境下;
  • COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块。

**为了解决这问题:**微软推出了——Microsoft .NET Framework

1.1.2.NET框架

  1. **定义:**灵活稳定,能够运行web服务和Windows程序的Windows内置组件,是软件的运行环境,也是软件开发和存在的基础

  2. 特性:

  • 消除了Windows操作系统带来的不一致性(通过将Windows操作系统的底层的API,封装,并为不同的Windows提供了统一的应用层接口)
  • 具有COM组件的统一性,提供了用户认证信息管理、应用程序版本管理和应用程序部署等
  • 面向对象,围绕继承,力求代码组件重用,它所提供的的类库是相对独立的模块,可以广泛应用于软件开发的各领域
  • 支持多种开发语言(通过公共语言规范(CLS)将VB.NET、VC++.NET、C#、Visual J#等多种语言统一,只要是符合CLS的开发语言都可以被.NET支持
  • 网页的开发和改进采用将网页分成前台网页和后台代码的前后台开发方式。将页面开发和逻辑开发完全分离,提高网页的开发效率以及组件和代码的重用

3. 发展

.NET的全名叫:.NET Framework(.NET框架)

在2001年微软发布了.NET的第一个版本,十年后,被接受认可,经历了6个版本的迭代更新

(1)C#基础——.NET 框架_第1张图片
(1)C#基础——.NET 框架_第2张图片

注意:1.0和1.1是完全独立版本,它不能与后面的版本兼容,其他版本可以向后兼容

1.2、公共语言运行库

平台无关性:是.NET重要特性之一,公共语言运行库是实现这一目标的核心组件,提供应用程序最基本的运行环境

通过公共语言规范定义统一的.NET框架开发语言

1. 公共语言规范——CLS

**(1)定义:**规定了所有应用程序都需要的最小的语言功能集合,使得支持编写CLS的开发语言所编写的代码都可以在.NET框架运行

l 公共运行库通过定义公共语言规范(CLS)实现.NET的平台无关性、以及跨语言编程

l 所有代码都应该遵守通用类型系统(CTS)和公共语言规范(CLS)

(2)内容:

命名规则:

  • 所有类型,成员等在独自命名的空间下必须具有唯一的名称,而且名称不能只是大小写不同
  • 名称不能使用关键字

数据类型:支持基本的基元类型(char int 等);支持数组和枚举,类和接口;类成员可见性必须支持私有,继承,公开三种

类成员:

  • 必须支持构造函数、属性、方法、字段和事件;
  • 必须支持类成员的重载和覆盖;支持类的继承和向上转化;类对象必须是引用

**接口成员:**接口成员不能有访问性,可以包括字段、属性、方法和事件

异常处理:必须支持异常处理并且异常可以继承,从而实现自定义异常

**事件支持:**事件必须可以动态发布和订阅,事件必须具有唯一的名称

泛型支持:泛型名称必须包含泛型的具体类型参数(也必须满足CLS规定),可以支持对类型进行约束

注意:符合CLS规范的开发语言:C#和VB.NET

1.3、中间语言——MSIL

公共语言运行库 和 公共语言规范 是.NET实现语言和跨平台的基础

问题:如何让满足CLS的高级语言统一到一起,实现跨平台?——MSIL

MSIL:

(1) **定义:**微软中间语言(MSIL),这是一种符合CLS且风格像汇编的中级语言

问题:为什么叫中级语言?

因为它只是一些模拟的高效的低级指令组成,不像汇编语言,可以和硬件指令紧密结合

通过.NET开发的应用程序能成为在计算机上可以执行的程序的步骤:

(1)C#基础——.NET 框架_第3张图片

总结:任何执行于.NET框架上的高级语言都必须提供对应的编译器和链接器,以便将对应的源代码生成为MSIL代码;.NET应用程序实际保存的是MSIL中间代码,而不是直接运行于操作系统上的二进制机器代码

(1)C#基础——.NET 框架_第4张图片

1.4、公共语言规范和C#

.NET的目标之一:改变多种开发语言各自为政,相互类型上不完全兼容的问题——实现跨语言编程

多种语言想要进行相互交互,必须定义统一的语言规范

.NET框架通过公共语言规范(CLS)实现跨语言编程,公共语言规范定义了所有可以在.NET框架上运行的代码所必须满足的基本节接口。

  • CLS
  • CLS设计足够大,包括语言构造,同时也足够小,大多数语言都支持它
  • CLS定义了基本数据类型的数量和占用的空间,eg:Int32(4字节带符号整数),Int16(2字节带符号整数)
  • CLS定义了面向对象开发语言的基本元素——类
  • …………关于泛型的统一接口

(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 的类设计器和代码编辑环境,可以加快类设计,增强代码可读性
指针和不安全代码机制 用在直接内存访问必不可少的情况下,进行一些内存操作
没有头文件和源文件概念 对类、接口、委托、方法、字段、属性等定义的位置和顺序没有要求,数量上也没有任何限制

1.5 .NET类库

1.5.1 命名空间和程序集

程序集:为了解决模块版本不一致的问题

**定义:**程序集通常以一个动态链接库(DLL)的形式存在,包括公共语言运行执行的代码,形成安全边界、类型边界、引用范围边界和版本边界。

特点:可以被其他程序集引用,实现模块重用

用途:进行模块级别的划分,将相互关联的代码放在同一个程序集中,为他需要的使用的模块 或 应用程序提供及接口,便于重用

在同一个程序集中,命名空间用于细致的划分,同一接口的不同实现用不同的命名空间

命名空间:

每个.NET程序集包含一个或多个命名空间

定义:命名空间是一种用于准确定位数据类型的技术,通过命名空间层层定位,可以明确地找到具体要使用的数据类型。

特点:一个命名空间可以包含具体类型和子命名空间

eg:System.Threading.Timer 和System.Windows.Forms.Timer 都是类型Timer

但是前者是线程命名空间,后者是命名空间

.NET可以根据命名空间找到两个具有相同名字的类型,避免混淆

如果程序中的数据类型是文件,那么命名空间就是文件夹

1.5.2 垃圾回收器

一、 垃圾回收机制

**(1)定义:**自动内存管理,用来自动追踪内存对象,并在不需要的时候自动释放内存

开发人员不需要关心内存释放

(2)在.NET中所有的对象都是引用,每一个引用具有一个引用计数器:表示该对象现在被多少个引用所引用

第一次分配对象,引用计数器为1

  • 当对象再次被使用,引用计数器+1;
  • 对象推出作用域不再有效,引用计数器-1

(3)公共运行库本身控制着垃圾回收器的周期性执行,每次回收器执行都会扫描当前被应用程序分配的对象

如果引用计数器为0;则表示不再被引用,即可销毁,垃圾回收器自动释放对象所占用的内存

(3) 优点:

  • 可以防止内存泄漏
  • 更快地释放内存

.NET为开发人员提供了显式控制垃圾回收器的接口,可以明确通知垃圾回收器马上进行内存清除,以便马上释放内存(垃圾回收器自动释放有延迟)

1.5.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页面控件等

还有很多的类库,可以资讯查询

你可能感兴趣的:(C#,.net,c#,microsoft)