声明:
- 本博客为原创博客,主要讲述学习C# 高级编程(第六版)中的学习笔记,转载请声明出处。
- 如有技术问题或需交流可直接联系本人邮箱:chuiwenwei@163.com
目录:
- C#与.Net的关系
- 公共语言运行库(CLR)
- 中间语言(IL)
- 程序集
1.C#与.Net的关系
- C#是专门为.NET Framework设计的语言
- C#本身就是一门语言,不是.NET的一部分。但C#语言是和.NET一起使用
- C#在设计时就吸取了C++和JAVA的经验,是一种基于现代面向对象设计方法的语言
2.公共语言运行库(CLR)
- .NET Framework的核心是其运行库的执行环境,称为公共语言运行库或.NET运行库。
- 通常将在CLR控制下运行的代码称为托管代码
- CLR在执行编译好的代码前要进行两个阶段:1.将源代码编译为Microsoft 中间语言(IL),2.CLR把IL编译为平台专用的代码
- Microsoft的中间语言与Java字节代码一样都是低级语言。语法是使用数字代码可以很快转化为内部机器码。其设计造就了其的优点:平台无关性、提高性能和语言的互操作性
- .NET的平台无关性暂时还只能使用与Windows平台,不过人们已经在积极准备使其可以应用于其他平台
- VB2008,VC++2008,COM和COM+可以转化为中间语言
- 托管C++比C#更优越的一点是可以在托管C++代码中调用非托管C++类,而不必采用COM交互功能
- .NET集成了COM的互操作性,从而使托管代码可以调用COM组件,COM组件也可以调用托管代码
3.中间语言(IL)
- 中间语言是面向对象编程和对接口的支持
- 中间语言与其他编程语言一样提供了许多预定义的基本数据类型。它的一个特性就是值类型和引用类型有明显区别。对于值类型,变量保存其数据,对于引用类型,变量保存地址,对应的数据可以在该地址中找到。
- 中间语言对数据存储的规范:引用类型的实例存储在托管堆的内存区域中,值类型存储在堆栈中
- 中间语言的一个重要方面是它是基于强数据类型,所有的变量都清晰的标记为属于某个特定的数据类型
- 通用类型系统(CTS)定义了可以在中间语言中使用的预定义数据类型,所有面向.NET Frameword的语言都可以生成最终基于这些类型的编译代码,比如C#的int映射为CTS中的Int32
- 公共语言规范(CLS)和通用类型系统一起确保语言的互操作性。
- .NET运行库采用的方法是垃圾收集器,这是一个程序,其目的是清理内存,方法是所有动态请求的内存都分配到堆上,当.NET检测到给定进程的托管堆已满,需要清理时,就调用垃圾收集器。垃圾收集器处理目前代码中的所有变量,检查对存储在托管堆上的对象的引用,确定哪些对象可以从代码中访问。没有应用的对象就不能再从代码中访问,因而被删除。
- 垃圾收集器的一个重要方面是它的不确定性,不能保证什么时候会调用垃圾收集器。
4.程序集
- 每个程序在运行时,Windows通过地址空间把进程分离开来,这样每个进程就有4G的虚拟内存来存储其数据和可执行代码。Windows利用额外的间接方式把这些虚拟内存映射到物理内存或磁盘空间的一个特殊区域中。
- 任何进程都只能通过虚拟内存汇总的一个地址来访问内存,不能直接访问物理内存