《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
最新文章
- ThinkPHP 多语言
- Java 中使用javah编译头文件出现找不到类的情况
- 08 高效的SQL
- ext_EditorGridPanel (8)
- 【原】centos6.5下cdh4.6 Oozie安装
- jQuery慢慢啃之核心(一)
- coreos docker 尝新奇
- POJ 2488 A Knight's Journey(深搜+回溯)
- docker tag
- SQL SERVER大话存储结构(3)_数据行的行结构
- 习题 7-2 uva225(回溯)
- Mysql--执行计划 Explain
- BZOJ_1100_[POI2007]对称轴osi_KMP+计算几何
- 软件测试实验二----selenium、katalon、junit
- 小程序获取openid 出现null,{";errcode";:40163,";errmsg";:";code been used, hints: [ req_id: WNUzlA0105th41 ]";}
- SpringBoot使用数据库
- HttpClient超时设置setConnectionTimeout和setSoTimeout
- Standard C 之 math.h和float.h
- CentOS安装oracleJDK
- [整理]内存重叠之memcpy、memmove
热门文章
- Struts框架核心工作流程与原理
- springboot-27-整合mybatis,druid连接池
- IC 设计中DFT的Boundary Scan功能
- 白话$resource,$resource中的增删改查
- APIO 2018 游记
- 第19课-数据库开发及ado.net ADO.NET--SQLDataReader使用.SqlProFiler演示.ADoNET连接池,参数化查询.SQLHelper .通过App.Config文件获得连接字符串
- Debug模式下,测试app后缀名“-测试”
- 【Java并发编程】10、Java 理论与实践: 正确使用 Volatile 变量
- 【Java基础】7、Java同步机制之Monitor监视器与syncrhoized实现原理
- Ubuntu 18.04 安装 Docker-ce(就是Docker社区版本)