2017/7/17
C#和.NET框架
.NET框架,CLR的C#语言
.net框架是一个独立发布的软件包,包括了CLR,类库以及相关的语言编译器等工具。C#代码经过编译之后再CLR环境中运行。
.NET框架是一种比MFC或COM变成技术更一致并面向面对对象的环境,它的特点包裹一下几点。
1.多平台:该系统可以在广发的计算机上运行,包括服务器,桌面机到PDA和移动电话。
2.行业标准:该系统使用行业标准的通信协议,比如XML,HTTP,SOAP和WSDL。
3.安全性:该系统能提供更加安全的执行环境,及时有来源可疑的代码存在。
.NET框架由三部分组成
执行环境称为CLR(Common Language Runtime,公共语言运行库)。CLR在运行期管理程序的执行。
BCL 基类库
大大改进的编程环境
1.面向对象的编程环境
CLR,BCL和C#被设计的完全面对对象,并形成良好的集成环境
2.自动垃圾回收
CLR有一项服务称为GC(垃圾收集),它能为你自动管理内存
3.互操作性
.NET框架的设计专门考虑了不同的.NET语言,操作系统或Win32 DLL和COM之间的互操作性
(1).NET语言的互操作性允许不同的.NET语言编写的类,只需要遵循一定的规则即可。
(2).NET提供一种称为平台调用的特性,允许.NET的代码调用并使用非.NET的,但通过标准Win32 DLL 到处的纯C函数的代码,比如Windows API.
(3).NET框架还允许与COM的互操作。.NET软件组件能调用COM组件,而且COM也能调用.NET组件,就像它们是COM组件一样。
4.不需要COM
5.简化的部署
6.类型安全性
7.基类库
包含以下一些类
通用基础类:这些类提供了一组极为强大的工具,可以应用到广发的编程任务中,比如字符串操作,安全和加密。
集合类:这些类实现了列表,字典,散列表以及位数组
线程和同步类:这些类用于创建多线程程序
XML类:这些用于创建读取以及操作XML文档
编译成CIL
.NET语言的编译器接受源代码文件,并生成名为程序集的输出文件。程序集可以使可执行的文件或DLL
1 程序集里的代码并不是本机代码,而是一种名称为CIL(Common Intermediate Language,公共中间语言)的中间语言
2 程序集包含 的信息中包含下列项目
程序的CIL;
程序中使用的类型的元数据;
对其他程序集引用的元数据。
编译成本机代码并执行
程序的CIL直到他被调用运行时才会被编译成本机代码,在运行时,CLR执行下面的步骤(如图):
1、检查程序集的安全特性;
2、在内存中分配空间;
3、把程序集中的可执行的代码发送给实时(Just-in-Time,JIT)编译器,把其中的一部分编译成本机代码。
程序集中的可执行的代码在需要的时候由JIT编译器编译,然后他就被缓存已被再后来的程序中执行。使用这个方法以为着不被调用的代码不会被编译成本机代码,而且被调用到的代码纸杯编译一次。
一旦CIL被编译成本机代码,CLR就在他运行时管理它,执行像释放无助内存,检查数组边界,检查参数类型和管理异常之类的任务。
托管代码:为.NET框架编写的代码,需要CLR。
非托管代码:不在CLR控制之下运行的代码,比如Win32 C/C++ DLL。
编译和执行综述
无论原始源文件的语言是什么,都遵循同样的编译和执行过程
CLR
.NET框架的核心组件是CLR,他在操作系统的顶层并管理程序的执行,如图所示。CLR还提供下列服务:
自动垃圾回收;
安全和认证;
通过访问BCL(base class library,基类库)得到广泛的编程功能,包括入院Web服务和数据服务之类的功能。
CLI
CLI(Common Language Infrastructrue,公共语言基础结构),他把所有的.NET框架的组件连接成一个内聚的,一致的系统。他展示了系统的概念和架构,并详细说明了所有软件都必须坚持的规定和约定。CLI是一组阐述了系统的架构,规则和约定的规范。
CLI的重要组成部分
1.公共类型系统
CTS(Common Type System,公共类型系统)定义了那些在托管代码中一定会使用的类型的特征。CTS的一些重要方面如下:
CTS定义了一组丰富的内置类型,以及每种类型确定的、详细的特性;
.NET兼容编程语言提供的类型通常映射到CTS中已定义的内置类型集的某一个特殊子集;
CTS最重要的特征之一是所有类型都集成自公共的基类——object。
2.公共语言贵方
CLS(conmon language specification,公共语言规范)详细的说明了一个.NET兼容编程语言的规则,属性和行为。其主题包裹数据类型和,类结构和参数传递。
缩写回顾
C#编程概述
命名约定
标识符风格
Pascal风格 标识符中每个单词首字母大写 用于类型名和成员名 CarDeck,DealersHand
Canel风格 除第一个单词以外,标识符中所有单词都首字母大写 用于本地变量和方法参数
字段名称以下划线开头:_HighTemp、_LowTemp.
6种可以有用户自己创建的类型:
类类型 class;
结构类型 struct ;
数组类型 array;
美剧类型 enum;
委托类型 delegate;
接口类型 interface;
运行中的程序使用两个内存区域来储存数据:栈和堆。
栈
栈是一个内存数组,是一个LIFO(last-in first-out,后进先出)的数据结构,栈储存几种类型的数据:
某些类型变量的值;
程序当前的执行环境;
传递给方法的参数。
栈的特征
栈有如下几个普遍特征:
数据只能从栈的顶端插入和删除;
把数据放到栈顶 称为入栈;
从栈顶删除数据称为出栈;
堆
堆是一块内存区域,堆里的内存可以任意顺序存入和移除。
程序可以在堆里保存数据,但并不能显示的删除它们。CLR的自动GC在判断出程序的代码将不会在访问某数据项时,会自动清除无主的堆对象。
值类型 只需要一段单独的内存,用于储存实际的数据,位于栈中
引用类型 需要两段内存
第一段储存实际的数据,位于堆中。
第二段是一个引用,指向数据在堆中的存放位置,引用放在栈里
说明:对于引用类型的任何对象,他所有的数据成员都存放在堆里,无论他们是指类型还是引用类型。
变量
变量是一个名称,表示程序执行时储存在内存中的数据
类:基础
类是一个能储存数据并执行代码的数据结构,它包含以下内容:
数据成员,它储存与类的实例相关的数据,数据成员通常模拟该类所表示的显示世界事务的特性
函数成员,它执行代码。函数成员通常模拟类所表示的显示世界事务的功能和操作。
类是逻辑相关的数据和函数的封装,通常代表真实世界中的或概念上的事务。
运行中的程序是一组相互作用的对象。
字段和方法是最重要的类成员类型,字段是数据成员,方法是函数成员。
字段
字段是隶属于类的变量
1、他可以是任何类型,无论是预定义类型还是用户定义类型
2、和所有变量一样,字段用来保存数据,并具有如下特征:
它们可以被写入;
它们可以被读取;