前言

大家好。这是开通本号的第一篇文章。从事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字节码还强大的中间语言。

请看下回分解。

觉得文章有意义的话,请动动手指,分享给朋友一起来共同学习进步。

附文:

Java VS .NET:Java与.NET的特点对比

在Java的黄金时代下,.Net真的没落了吗

 

解读经典-《C#高级编程》第七版-Chapter1-.Net体系结构-Page1-6的更多相关文章

  1. c#高级编程第七版 学习笔记 第一章 .NET体系结构

    第一章      .NET体系结构 本章内容: 编译和运行面向.NET的代码 Microsoft中间语言(Microsoft Intermediate Language,MSIL或简称IL)的优点 值 ...

  2. c#高级编程第七版 学习笔记 第二章 核心c#

    第二章 核心C# 本章内容: 声明变量 变量的初始化和作用域 C#的预定义数据类型 在c#程序中使用条件语句.循环和跳转语句执行流 枚举 名称空间 Main()方法 基本的命令行c#编译器选项 使用S ...

  3. c#高级编程第七版 学习笔记 第三章 对象和类型

    第三章 对象和类型 本章的内容: 类和结构的区别 类成员 按值和按引用传送参数 方法重载 构造函数和静态构造函数 只读字段 部分类 静态类 Object类,其他类型都从该类派生而来 3.1 类和结构 ...

  4. ASP.NET MVC 4高级编程(第4版)

    <ASP.NET MVC 4高级编程(第4版)> 基本信息 作者: (美)Jon Galloway    Phil Haack    Brad Wilson    K. Scott All ...

  5. 《UNIX环境高级编程(第3版)》

    <UNIX环境高级编程(第3版)> 基本信息 原书名:Advanced Programming in the UNIX Environment (3rd Edition) (Addison ...

  6. 【转】apue《UNIX环境高级编程第三版》第一章答案详解

    原文网址:http://blog.csdn.net/hubbybob1/article/details/40859835 大家好,从这周开始学习apue<UNIX环境高级编程第三版>,在此 ...

  7. Linux - Unix环境高级编程(第三版) 代码编译

    Unix环境高级编程(第三版) 代码编译 本文地址:http://blog.csdn.net/caroline_wendy 时间:2014.10.2 1. 下载代码:http://www.apuebo ...

  8. Unix环境高级编程第三版中实例代码如何在自己的linux上运行的问题

    学习Linux已经有2个月了,最近被期末考试把进度耽误了,前几天把Unix环境高级编程看了两章,感觉对Linux的整体有了一些思路,今天尝试着对第一章涉及到的一个简单的交互式shell编译运行一下,结 ...

  9. C#高级编程 (第六版) 学习 第七章:委托和事件

    第七章 委托和事件 回调(callback)函数是Windows编程的一个重要方面,实际上是方法调用的指针,也称为函数指针. .Net以委托的形式实现了函数指针的概念,.Net的委托是类型安全的. 委 ...

  10. C#高级编程第11版 - 第七章 索引

    [1]7.1 相同类型的多个对象 1.假如你需要处理同一类型的多个对象,你可以使用集合或者数组. 2.如果你想使用不同类型的不同对象,你最好将它们组合成class.struct或者元组. [2]7.2 ...

随机推荐

  1. Python开发——13.操作系统、进程和线程

    一.操作系统 1.定义 操作系统是用来协调.管理和控制计算机硬件和软件资源的系统程序,它位于硬件和应用程序之间.操作系统运行在内核态,拥有对所有硬件的完全访问权,可以执行机器能够运行的任何指令.软件的 ...

  2. 【转】像素 Pixel (Picture Element)

    原文链接:https://blog.csdn.net/zssureqh/article/details/78768942 1.像素Pixel 讲到概念,首选Wiki百科.当然我说的是英文版Pixel ...

  3. SVM探讨

    目录 SVM探讨 SVM算法 硬间隔最大化的优化目标 软间隔最大化 SVM探讨 SVM算法 根据处理问题的复杂度,SVM 可由简到繁分为三种: 线性可分支持向量机:硬间隔最大化. 线性支持向量机:数据 ...

  4. js的window.open()改写

    说明:window.open(url,"_blank")方法替换如下: function openUrl(url) { try { if (/MSIE\s*(\d+\.\d+);/ ...

  5. js读取txt文件

    $('#selectAreaFile').on('change',function(e){//用户区域的文件选择        var files=e.target.files;        if ...

  6. pb 11 数据窗口空白,预览pb崩溃解决方案

    注册表中找到:HKEY_CURRENT_USER\Software\Sybase\PowerBuilder\11.5  删掉

  7. 小白看过来runtinme

    RunTime 概述 RunTime消息机制 RunTime交换方法 RunTime消息转发 RunTime关联对象 RunTime实现字典与模型互转 1.RunTime 概述 我们在面试的时候,经常 ...

  8. Windows 10 IoT Core 17133 for Insider 版本更新

    今天,微软发布了Windows 10 IoT Core 17133 for Insider 版本更新,本次更新只修正了一些Bug,没有发布新的特性.用户可以登录Windows Device Porta ...

  9. Java面试集合(六)

    1. abstract抽象 什么是abstract,中文为抽象,从具体事物抽出,概括它们共同的方面,本质属性与关系等,称为抽象.看不见,摸不着的东西叫做抽象,抽象是人们对世界万物的感觉,用特定的图像表 ...

  10. springboot动态修改日志级别+权限认证

    1. springboot动态修改日志级别+权限认证 1.1. 需求 网上找到的动态修改日志级别的方式,基本都是没有权限验证的,或者特地关闭权限验证,但也没给出加上验证的解决方式 修改日志等级也是一个 ...