解读经典-《C#高级编程》第七版-Chapter1-.Net体系结构-Page1-6
前言
大家好。这是开通本号的第一篇文章。从事IT行业已经20年了,从使用PowerBuilder做企业信息系统开始,做了七八年开发,然后转型Java不是很成功,从07年之后,我转做产品经理,机缘巧合,在2012年之后,又接触到.Net编程,在2016年正式回归到开发的行列,整整10年。最近几年,在技术上要补以前落下的课,所以变化很快,进步也很快,16年基于DevExpress做Winform开发,17年转到基于asp.net mvc做web开发,再转java web开发,又转Andriod Java开发,18年再转微信公众号开发,和前端基于vue.js,angular,ionic做开发。压力大,动力也大,我还觉得我掌握了学习技术的窍门,这和十几年前我从技术转产品经理完全不同,那时候觉得做技术遇到瓶颈,没有学习的环境和机遇,所以才转做产品和管理。所以,我也很想将我学习的经验分享出来,大家一起学习进步。
我觉得最大的经验,就是在入门后,不要细细碎碎的学习,而是要读经典,读大部头书籍。因为只有在对一个方面有了全面的认识后,碰到问题才能举重若轻,才能有广阔的思路。所以我就考虑来解读经典书籍。
推送的第一篇文章,讲的是《C#高级编程》第七版,我通过这本书加深了对C#的理解,我读的C#高级经典仅此一本,反复读取多次,已经感觉很有裨益。在此之前,特别说明一下我觉得很重要的,是关于学习方法。我认为我以前一直想掌握而不得的学习方法,其实很简单,就好比“摊鸡蛋饼”,首先你得有面,而面要采用好的面粉,那就是在入门后就要开始猛攻经典书籍,2000页的经典书籍啃下来,再读几遍,你就有了一个好的打底。然后你针对具体问题可以搜索论坛文章,具体问题具体补充,这些是配菜。
而经典书籍太庞大,可以说十几年前,我就看过《Java编程思想》,《JavaScript权威指南》等经典书籍,结果没看下来,技术没能提升,最后转行做产品和管理。所以我就想,有没有一种方式,能让人轻松一点的了解这些经典书籍的精髓?所以我就想到了经典书籍解读。这是我想写这个专栏的原因。
现在流行写公众号,我的文章也会首发到公众号,并不定期的同步到博客园。所以欢迎大家关注我的公众号,更及时和便捷的读取文章。扫描二维码识别关注:

为了达成最好的学习效果,我的考虑是,学习应该像摊鸡蛋饼一样,既要有饼,也要有鸡蛋、葱花、配菜,这样才好吃。因此学习经典书籍,虽然够了,然而并不好吃,也不够扎实,因此我会在每篇主文章后面附两篇和当前解读相关的互联网上的文章,一般是会来自于博客园和CSDN。请大家也积极阅读附篇文章。
01
.Net和Java的对比
.Net在Java之后诞生,因此吸收了很多Java的成功经验。同时,.Net和Java一样都是基于虚拟机,能实现跨平台(当然.Net原先只是理论上的跨平台,直到后来有了Mono,最近几年微软了有自己的.Net Core)。如果将.Net和Java做个对比,它们之间大致可以按如下的等同理解:
1).Net的公共语言运行库(CLR)等同Java的虚拟机JVM。前者将高级语言编译成中间语言(IL),后者将Java语言编译成字节码(Bytecode)。
2).Net Framework等同JDK。也就是开发工具类库。
3)Java还有其他众多概念,比如JRE(Java Runtime Environment),JavaSE,JavaEE,JavaME等,对应各自不同的安装包。.Net相应比较少有对标概念。从这里可以体现出Java设计者和.Net设计者的风格区别。在我看来Java从语言到框架都想要有一种“范儿”,爱讲标准、模式,曾经很流行的所谓“21种设计模式”就来源于Java社区,有.Net开发者抄了不少,我是觉得并无必要,害处更大。而.Net的风格或者说微软的风格是简单高效,不讲范儿讲效率。.Net使用一个.Net Framework囊括了所有,配合其最优秀的开发工具Visual Studio(后面简称VS),使入门简单了很多。
02
C#和.Net的关系
.Net全称.Net Framework,它是一个框架,而C#是一门语言,基于.Net运行,基于.Net运行的语言还有VB.Net,VC++.Net等。
03
公用语言运行库(CLR)
CLR是.Net Framework的核心部分。从字面上很好理解,即其运行的是公共语言(也就是中间语言IL)。比如对于C#语言,需要先通过C#编译器(csc.exe)编译成中间语言,然后通过CLR将IL编译成不同操作系统平台的机器代码。这就是所谓的两阶段编译。因此,和JVM一样,CLR能提供平台无关性。
中间语言总是即时编译的(JIT编译),所谓JIT编译,就是某段IL被调用时,就会被立即编译成本地机器代码,之后就不再重新编译。这引发了.Net和Java谁更快的论战,我觉得这种论战意义不大。Java现在也已经引入了JIT编译机制。
JIT编译器还带来了一个性能福利,因为JIT编译器可以针对当前运行的处理器的特性进行针对性的编译优化,这是相对于C++等静态编译语言的优势。
CLR还提供了一个特性,即多语言的互操作性,比如C#和VB.Net,VC++.Net的互操作性。这是JVM所没有的,也体现了.Net的强大之处。同时.Net也对传统的COM提供了支持(通过包装器wrapper),从而能够实现和其他语言比如Delphi的互操作。
而多语言互操作性造就了一个比Java字节码还强大的中间语言。
请看下回分解。
觉得文章有意义的话,请动动手指,分享给朋友一起来共同学习进步。
附文:
解读经典-《C#高级编程》第七版-Chapter1-.Net体系结构-Page1-6的更多相关文章
- c#高级编程第七版 学习笔记 第一章 .NET体系结构
第一章 .NET体系结构 本章内容: 编译和运行面向.NET的代码 Microsoft中间语言(Microsoft Intermediate Language,MSIL或简称IL)的优点 值 ...
- c#高级编程第七版 学习笔记 第二章 核心c#
第二章 核心C# 本章内容: 声明变量 变量的初始化和作用域 C#的预定义数据类型 在c#程序中使用条件语句.循环和跳转语句执行流 枚举 名称空间 Main()方法 基本的命令行c#编译器选项 使用S ...
- c#高级编程第七版 学习笔记 第三章 对象和类型
第三章 对象和类型 本章的内容: 类和结构的区别 类成员 按值和按引用传送参数 方法重载 构造函数和静态构造函数 只读字段 部分类 静态类 Object类,其他类型都从该类派生而来 3.1 类和结构 ...
- ASP.NET MVC 4高级编程(第4版)
<ASP.NET MVC 4高级编程(第4版)> 基本信息 作者: (美)Jon Galloway Phil Haack Brad Wilson K. Scott All ...
- 《UNIX环境高级编程(第3版)》
<UNIX环境高级编程(第3版)> 基本信息 原书名:Advanced Programming in the UNIX Environment (3rd Edition) (Addison ...
- 【转】apue《UNIX环境高级编程第三版》第一章答案详解
原文网址:http://blog.csdn.net/hubbybob1/article/details/40859835 大家好,从这周开始学习apue<UNIX环境高级编程第三版>,在此 ...
- Linux - Unix环境高级编程(第三版) 代码编译
Unix环境高级编程(第三版) 代码编译 本文地址:http://blog.csdn.net/caroline_wendy 时间:2014.10.2 1. 下载代码:http://www.apuebo ...
- Unix环境高级编程第三版中实例代码如何在自己的linux上运行的问题
学习Linux已经有2个月了,最近被期末考试把进度耽误了,前几天把Unix环境高级编程看了两章,感觉对Linux的整体有了一些思路,今天尝试着对第一章涉及到的一个简单的交互式shell编译运行一下,结 ...
- C#高级编程 (第六版) 学习 第七章:委托和事件
第七章 委托和事件 回调(callback)函数是Windows编程的一个重要方面,实际上是方法调用的指针,也称为函数指针. .Net以委托的形式实现了函数指针的概念,.Net的委托是类型安全的. 委 ...
- C#高级编程第11版 - 第七章 索引
[1]7.1 相同类型的多个对象 1.假如你需要处理同一类型的多个对象,你可以使用集合或者数组. 2.如果你想使用不同类型的不同对象,你最好将它们组合成class.struct或者元组. [2]7.2 ...
随机推荐
- Exp8 Web基础 20154320 李超
1.实验后回答问题 (1)什么是表单. 表单是一个包含表单元素的区域,表单元素是允许用户在表单中输入信息的元素,表单在网页中主要负责数据采集功能,一个表单有三个基本组成部分:表单标签.表单域.表单按钮 ...
- 从Typescript看原型链
话不多说先来段代码 class Parent { private name:string; constructor(name) { this.name = name; } public getName ...
- 如何定制 antd 的样式(theme)
> antd 的组件样式(主题)是支持定制的,它的样式实现是基于 less.官方的订制手册参看 https://github.com/ant-design/ant-design/blob/mas ...
- VUE最佳实践
vuex 作为model数据请求由action来获取,页面组建级的发送action,返回promise给组建使用,如果使用周期较长需comit到mutation保存到state. 数据分模块,根据业务 ...
- La nuova tecnologia del puntatore laser
Il potente puntatore laser 20000 mW viene fornito di serie con gestione termica e driver laser di qu ...
- 把纯C的动态库代码改造成C++版的
近期想把一份纯C的跨Win/Linux的动态库工程代码改成支持C++编译器,这样用C++写起代码来比较顺手.要点是保证动态库的ABI一致性,既导出接口不能改变. 主要的改动有: 1.把.c后缀名换成. ...
- [转载]你所不了解的DevOps
DevOps开发运维训练营 一旦建立了创新的文化,即使那些并非科学家或者工程师的人——诗人.演员.记者——也能以团体的形式,接受科学文化的意义.他们信奉创新文化的概念.他们以促进这种文化的方式投票.他 ...
- Javascript高级编程学习笔记(64)—— 事件(8)键盘与文本事件
键盘与文本事件 用户在使用键盘时会触发键盘事件 “DOM2级事件”最初规定了键盘事件,但是最后在定稿时又删除了相应内容 所以键盘事件被放入了DOM3级事件的规范中 总的来说有三个键盘事件: keydo ...
- Javascript高级编程学习笔记(30)—— BOM(4)navigator对象
window对象作为浏览器的全局对象.location对象保存了页面的url信息 那么navigator对象又有什么作用呢? navigator对象 该对象最早由 Netspace Navigator ...
- 小奶狗给小喵咪上CSS课程
小奶狗给小喵咪上CSS课程 小奶狗,你好啊? 小喵咪你好~ 听说学习HTML,要学习CSS是吗? 是的,小甜心~ 那么CSS是什么呢? CSS是Cascading Style Sheet英文的缩写,中 ...