前言

大家好。这是开通本号的第一篇文章。从事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. 浅析列表页请求优化(history API)

    最近搞了下列表页请求的功能,并做了一下调研整理,记此文备忘. 列表页请求的功能到处可见,比如在博客园. 点击相应的页码,页面返回相应的内容,看上去似乎大同小异,但是一些小的细节还是可以区分优劣. fu ...

  2. OC重写init方法

    在创建一个对象的时候我们经常会用到init方法,单单是init只能是初始化,当我们在初始化的时候想要给这个对象加上默认的东西的时候, 系统提供的init方法就不能满足我们的需要,这时,就需要我们自己去 ...

  3. IDEA添加项目为library

    1.如果要作为library的项目没有被IDEA编译就先把项目放在IDEA里面编译一下,因为这样后面导入module会方便一点.下面直接附上步骤 2.假设你已经用IDEA编译好了作为library的项 ...

  4. Asp.Net WebAPI核心对象解析(三)

    对于.NET的分布式应用开发,可以供我们选择的技术和框架比较多,例如webservice,.net remoting,MSMQ,WCF等等技术.对于这些技术很多人都不会陌生,即时没有深入的了解,但是肯 ...

  5. Java安全编码:糟糕的在线建议和令人困惑的APIs

    对于程序员和软件开发人员来说,网络论坛提供了一个交流知识和寻找具体编码难题答案的好地方.遗憾的是,他们并不总是准确信息的来源. 弗吉尼亚理工大学的一组研究人员分析了数百篇关于Stack Overflo ...

  6. C#介绍RabbitMQ使用篇一HelloWorld

    RabbitMQ官网官方介绍: 译文: RabbitMQ是目前部署最广泛的开源消息代理(何为代理?可以理解为一个提供功能服务的中间件). 在全球范围内的大小企业中的生产环境中,RabbitMQ的部署两 ...

  7. PLSQL使用scott登录

    Oracle有3种用户: system.sys.scott,其中system和sys的区别在与能否创建数据库,sys用户登录才可以创建数据库,而scott是给初学者学习的用户,学习者可以用Scott登 ...

  8. 页面css样式找不到问题

    出现了一个页面没有样式的问题: 问题: 1.路径不对, 可以打开页面f12看样式是否找到 检查路径是否正确. 2.样式没引全或者没引对. 查看引入的样式是否正确或缺少样式. 3.路径明明写对了却404 ...

  9. 高数复习--什么是DCT

    离散余弦变换(英语:discrete cosine transform, DCT)是与傅里叶变换相关的一种变换,类似于离散傅里叶变换,但是只使用实数.离散余弦变换相当于一个长度大概是它两倍的离散傅里叶 ...

  10. vue 自学笔记记录

    vue 自学笔记(一): 知识内容:  安装vue ,创建vue实例,安装第一个组件,单项数据流 https://www.cnblogs.com/baili-luoyun/p/10763163.htm ...