C# 基于.NET运行时,因此有必要首先对.NET以及C#与.NET平台的关系有必定的了解。数据库
一 .NET平台编程
.NET背后的基本思想是将本来独立工做的设备、网络服务整合在一个统一的平台上,从而能够为用户提供丰富全面的解决方案。平时提到.Net通常默认指的是.Net Framework,但其实这只是.NET平台的一部分另外还包括.NET Building Block Service、.NET Device Software等一系列看不懂的东西。.Net Framework包含公共语言运行时Common Language Runtime(CLR)和.Net Framework类库两部分。能够把公共语言运行时理解成.NET平台的虚拟机,另外全部的.NET语言都包含了.Net Framework类库。这个类库涵盖了从文件读写到数据库操做再到XML、SOAP等等很是普遍的功能。缓存
二 .NET Framework网络
a) CLR编程语言
CLR是.NET的核心,它是一个支持多种语言的程序同时运行、互相配合的实时环境。CLR支持多语言(C#, VB.NET,F#等)之间的互操做,那么它是怎么作到这一点的呢——由于这些语言都遵循了公共语言规范Common Language Specification(CLS)。一门语言只有遵照了CLS规范,才能建立运行在CLR上的应用程序。ide
关于CLR还有另外一个重要的概念:托管代码。托管代码是在CLR的保护和管理下运行的代码,由CLR负责托管代码的内存分配、任务调度以及托管代码之间的通信,这能够保证每一个应用程序(即便是使用不一样的语言编写的)都可以遵循统一的行为规范。函数
b) .Net Framework类库学习
.Net Framework类库对保证多语言间的互操做性具备重要意义。由于经过.Net Framework类库开发者能使用由CLR提供的统一接口。虽然其它许多语言都有本身的类库,好比C++,但.Net平台特殊的地方在于,编程语言之间的区别仅仅在于调用.Net Framework类库时,在语义上的区别。下面来对比C++和C#对“Hello, World”程序的实现:ui
C++:接口
C#版:
C++可使用cout函数直接输出“Hello, World”,但C#要使用类库提供的WriteLine方法。C++自己包含一个负责字符处理、文件读写、屏幕显示等的类库,这能够认为是C++语言自己的功能,但C#等.NET平台下的语言却不具有这些功能,这些功能属于类库,离开类库,C#之类的语言基本上作不了任何事情。
c) IL码和JITters
.NET平台的语言编译器会将源码编译成IL码Microsoft Intermediate Language(MSIL), IL码自己也能够说是一种编程语言。在编译好的应用程序第一次被执行时,IL码才被编译成真正的机器码。大概过程以下
1. 用C#编写源码
2. 使用C#编译器(csc.exe)编译成IL码
3. 在编译好的应用程序被执行时,会使用实时编译器Just-In-Time Compiler(JITter)将IL码转换为机器码。
JITter只在某个方法被调用时才编译该方法,并且编译好的机器码会被缓存起来,只有C#源码发生变化时才从新编译机器码。
三 .NET类库的主要结构
学习资料:Inside C# by Tom Archer