《Inside C#》笔记(一) .NET平台
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上的应用程序。
关于CLR还有另一个重要的概念:托管代码。托管代码是在CLR的保护和管理下运行的代码,由CLR负责托管代码的内存分配、任务调度以及托管代码之间的通讯,这可以保证每个应用程序(即使是使用不同的语言编写的)都能够遵循统一的行为规范。
b) .Net Framework类库
.Net Framework类库对保证多语言间的互操作性具有重要意义。因为通过.Net Framework类库开发者能使用由CLR提供的统一接口。虽然其它许多语言都有自己的类库,比如C++,但.Net平台特殊的地方在于,编程语言之间的区别仅仅在于调用.Net Framework类库时,在语义上的区别。下面来对比C++和C#对“Hello, World”程序的实现:
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
《Inside C#》笔记(一) .NET平台的更多相关文章
- [Openwrt 项目开发笔记]:Openwrt平台搭建(一)
[Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 最近开始着手进行Openwrt平台的物联网网关设 ...
- 笔记整理--Linux平台MYSQL的C语言
Linux平台MYSQL的C语言API全列表 - 第三只眼的专栏 - 博客频道 - CSDN.NET - Google Chrome (2013/8/18 22:28:58) Linux平台MYS ...
- [Openwrt 项目开发笔记]:Openwrt平台搭建(一)补遗
[Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 昨晚上熬夜写了[Openwrt项目开发笔记]:O ...
- 【读书笔记】Android平台的漏洞挖掘和分析
最近比较关注移动端的安全,以后也打算向安卓平台的安全发展.这篇博文主要是记录一些研究Android安全的读书笔记. Fuzzing技术的核心是样本生成技术 测试Android平台的组件间通信功能使用的 ...
- .Net 初步学习笔记之一——.Net 平台与.Net FrameWork框架的关系
.Net 包含两部分 .Net平台 和.Net FrameWork 框架 1..Net FrameWork框架包含于.Net平台. .Net FrameWork提供环境和支撑保证.Net平台运行. 2 ...
- 深入Java虚拟机读书笔记第二章平台无关性
Java的体系结构对平台无关的支持 Java平台 Java的体系结构通过几种途径支持Java程序的平台无关性,其中主要是通过Java平台自己.Java平台扮演一个运行时Java程序与其下的硬件和操作系 ...
- C# 学习笔记1 .NET平台,C#的重要概念
.NET平台构成的三个关键实体是: 1.CLR(公共语言运行库):为我们定位,加载,管理.NET类型,同时负责一些底层细节的工作,如内存管理,应用托管,处理线程,安全检查等,它包含了一个重要名为msc ...
- [笔记] FMX 移动平台 TWebBrowser 问题
FMX 移动平台下的 TWebBrowser 有一问题: 某些机子当 WebBrowser.Visible := False; 后,依然留在全屏,虽然看不见,但无法点击操作. 解决:用 WebBrow ...
- Docker笔记02-日志平台ELK搭建
OS: Centos7 准备工作: 虚拟机中安装Centos, 搭建Docker环境 ELK简介: 略 文档地址 https://elk-docker.readthedocs.io/ 需要注意的是在B ...
随机推荐
- 在MVC3中修改KindEditor实现上传图片到指定文件夹
KindEditor编辑器默认上传的图片文件夹,是根据系统时间自动生成的,图片是自动上传到这些文件夹里面,无法选择.如果要上传图片到指定文件夹,像相册一样管理图片,则需要扩展KindEditor编辑器 ...
- Android使用内容提供者实现增删改查操作
Android使用内容提供者实现增删改查操作 这里需要建立两个项目:SiYouShuJuKu(使用内容提供者暴露相关的操作),DQDYGApplication(使用内容解析者对第一个应用进行相关的解析 ...
- 手把手教你整合最优雅SSM框架
我们看招聘信息的时候,经常会看到这一点,需要具备 SSM 框架的技能, SpringMVC 可以完全替代 Struts,配合注解的方式,编程非常快捷,而且通过 restful 风格定义 url,让地址 ...
- 第十五章-class类文件结构
参考博文: (1)关于class的签名Signature (2)关于访问标识 (3)关于Class中的Signature属性 (4)附录1 常量池解析 (5)附录2 方法解析 (6)Class文件结构 ...
- SpringMVC之文件上传
上传是web程序中常见的功能,当使用上传时,需要把form表单中的enctype属性改为multipart/form-data,这样就使用了二进制进行上传,而后台需要解析这些数据.Dispatcher ...
- JDK7与JDK8中HashMap的实现
JDK7中的HashMap HashMap底层维护一个数组,数组中的每一项都是一个Entry transient Entry<K,V>[] table; 我们向 HashMap 中所放置的 ...
- PTA (Advanced Level) 1009 Product of Polynomials
1009 Product of Polynomials This time, you are supposed to find A×B where A and B are two polynomial ...
- 你的网站升级https了吗
升级 HTTPS,价值何在? HTTPS 实质上是一种面向安全信息通信的协议.从最终的数据解析的角度上看,HTTPS 与 HTTP 没有本质上的区别.对于接收端而言,SSL/TSL 将接收的数据包解密 ...
- js实现响应式瀑布流
导读:瀑布流,又称瀑布流式布局.是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部.最早采用此布局的网站是Pinterest ...
- Core Animation之CABasicAnimation(基础动画)
#import "ViewController.h" @interface ViewController () @property(nonatomic,strong)UIButto ...