解读经典-《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 ...
随机推荐
- ECharts使用—折线图动态加载
最近需求中用到折线图,单线条,多线交错,之前是散点图,用的是另一个 amcharts.js,这个文档也能找的到,回归早本次重点:ECharts 一.首先引入echarts.common.min.js文 ...
- WEB服务器搭建(Apache+Tomcat+eclipse)
1.下载xampp安装,选择Apache+MySQL+Tomcat 官方下载链接:https://www.apachefriends.org/zh_cn/download.html 2.下载安装jav ...
- 使用IDEA进行版本控制
1.使用IDEA进行版本控制 创建git repository add-添加到暂存区 commit-提交到本地库 push-推送指定远程库(自己的) idea上的pull指的是合并(merge),并非 ...
- MyBatis在非Spring环境下第三方DataSource设置-Druid篇
首先在ITEye上面看到一个同标题文章,在此说明,此文并非转载自 http://iintothewind.iteye.com/blog/2069522 ,因为这篇文章根本就是错误的,照着上面做,工程可 ...
- Android-Nexus5-命令刷机
第一步)需要有有一部Nexus5手机: 第二步)寻找 .tgz 刷机包: 1: 2: 3.进行hammerhead-lmy47d-factory-6c1ad81e.tgz的下载: 4 进行解压: 5. ...
- React 和 Redux 结合 1
React依赖: "devDependencies": { "babel-core": "^6.26.0", "babel-loa ...
- My Feedback for Windows 10 IoT Core on Feedback Hub App (4/1/2017-1/23/2018)
- 【备忘】EntityFramework 6 升级到 EntityFrameworkCore 注意点
正在将一个 .net framework 4.5 的项目升级到 .net core 2.1,其中使用到了 EF6,经历了一些修改: 命名空间的变化基本上可以靠自动提示补充完整,不需要强记. DbQue ...
- Handshake failed due to invalid Upgrade header: null 解决方案
Handshake failed due to invalid Upgrade header: null 解决方案 解决方案,在 Nginx ,location 中添加以下代码: proxy_set_ ...
- 第63节:Java中的Spring MVC简介笔记
前言 感谢! 承蒙关照~ Java中的Spring MVC简介笔记 MVC简介 Spring MVC 基本概念 Spring MVC 项目搭建 maven 使用Spring MVC进行开发 实现数据绑 ...