一、版本号的命名规则

大部分时候是在名字后面加些数字表示不同的版本。其中以加上年份号最为简单明了。比如 Visual Studio 2008。但是大部分人还是不用这个方式。因为年份号中没有带来跟多的信息。我们是希望能从版本号中得知有多大的改动的信息。很多软件都用的命名规则是下面这样的:

Major.Minor.Build.Revision

主版本.子版本.内部版本.修订版本

这也就是四个不同的数字,中间用点号分开,比如版本号4.3.2.1

一般主版本号变了代表改动非常大,子版本变了改动相对较少.内部版本,修订版本依次变动更小.反正你知道数字越在前面代表越重要。

不过上面的规范只是一个建议,你要不爱这么去命名也没谁管你.一般软件都用三个数字或两字数字就OK了.比如2.1.0或者2.1啊.第一次出来的产品一般就叫1.0

二、各种概念的区别

1. 编程语言:

编程语言只是一些语法规范,就像法律条文一样.一般把语法规则写在规格说明书(Specification)上。

2. CLR(公共语言运行库):

CLR是.NET框架为我们提供服务的方法。.NET的大部分特性----垃圾收集,版本控制,线程管理等,都使用了CLR提供的服务。

C#为了将代码在不同的平台上运行,所以在操作系统上面进行了一层抽象,叫做CLR,作用类似于Java中的虚拟机。当你为.NET Framework编译源代码的时候,得到的目标代码不是CPU能识别的机器指令,而是一种叫做"微软中间语言(MSIL,或简称为IL的代码)"的新语言。CLR提供了一个实时编译器(JIT),用来把IL代码编译为本机机器代码。这样一来,CLR能够使代码变得可移植,因为.NET应用程序的源代码必须被编译为IL代码,这些IL代码可以运行在任何提供CLR服务的平台上。

从CLR的角度来看,所有的语言都是平等的,只要有一个能生成IL代码的编译器就行,这就确保了各种语言的互操性。

所以有时C#语言规范出了一些新特性,编译器要支持肯定得做些更新.但CLR要更新不呢?这个看情况,如果那些新特性,编译器翻译过来后跟以前的东西一样,比如语言中多了一些语法糖,实际上原理还没变.那CLR不用更新就能支持.如果新特性编译器翻译过来更以前的东西不一样了,这时也得更新CLR去支持。

3. 类库

类库就是对那些常用操作的代码的封装,不用我们自己写,直接调用就可以实现功能了。

4. 开发工具

开发工具就是为了使你写代码方便的一个工具.比如给些智能提示,可以调试,当编译出错了会给你定位到出错的地方.但实际上你也可以完全不用开发工具,自己整个文本编译器就写代码的.不过很少有人这样做,太麻烦了。

5. .Net Framework

是编译器、CLR、类库的一个组合,将这些个功能集合在了一个上面。

6. Visual Studio(集成开发环境)

把开发工具和.Net Framework打包好的应用程序。

实际上VS中的东西很多,里面还有个C++的编译器,还有其他很多小工具.我们也可以单独安装.Net Framework。如果电脑上想运行C#开发的软件,必须先装个.Net Framework.在Win 7上,微软给你默认安装了.Net Framework 3.5。

7. Managed Code——托管代码

由公共语言运行库(CLR)环境(而不是直接由操作系统)执行的代码。托管代码应用程序可以获得公共语言运行库服务,比如自动垃圾回收、运行库类型检查和安全支持等。这些服务帮助提供独立于平台和语言的、统一的托管代码应用程序行为。

托管资源

8. Unmanaged Code——非托管代码

在公共语言运行库环境的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;它与托管代码不同,后者从公共语言运行库中获得这些服务。

9. Windows Runtime

Win8引入了Windows Runtime,简称WinRT。WinRT是一个操作系统模块,运行在用户态,介于WIN32的上层和应用程序的下层,目的在于提供更高效友好的开发接口供Win8的程序员使用。WinRT在二进制模型上基本就是照搬了经典的COM,WinRT和CLR互不依赖,WinRT可以被CLR使用。 WinRT通过C/C++实现,效率高是一个方面,更重要的是Win8引入了projection的概念,就是可以把WinRT的API用最直接最高效的方法,提供给上层的编程语言调用。这个语言可以是C#,C或者JavaScript。

10. Projection

如果首次接触Projection可以把其理解为是一种新的Windows API模型。传统的操作系统API,要么是暴露DLL的方法,要么是通过COM接口。无论是哪一种,在CLR中调用的时候都有不小的开销。使用这些传统API的效率,比调用一个C#自己的方法,效率差了多个数量级,根本的原因在于CLR的安全模型、内存模型和传统的unmanaged模型不兼容,所以跨越边界的调用需要额外的代码来处理。

而Projection提供的模型,是在提供新功能的同时,还针不同编程模型和语言,提供了最利于它们调用的方法。这样就主动避免了不同模型之间为了互相兼容导致的开销,也使得程序员写代码的时候非常自然流畅,调用的时候根本感觉不到和调用本地函数的区别。当然,能够实现这一点, 也是得益于CLR, C#语言和VS开发工具这十年的长足发展。

C#入门基本概念的更多相关文章

  1. MongoDB入门必读(概念与实战并重)

    MongoDB入门必读(概念与实战并重) 一.概述 MongoDB是一个基于分布式文件存储的数据库开源项目.由C++语言编写.旨在为WEB应用提供可护展的高性能数据存储解决方案. MongoDB是一个 ...

  2. 【转帖】H5 手机 App 开发入门:概念篇

    H5 手机 App 开发入门:概念篇 http://www.ruanyifeng.com/blog/2019/12/hybrid-app-concepts.html 作者: 阮一峰 日期: 2019年 ...

  3. Git 入门:概念、原理、使用

    出处: git入门:概念.原理.使用 git和Github 概念 Git --- 版本控制工具(命令). git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.git ...

  4. (大数据工程师学习路径)第一步 Linux 基础入门----基本概念及操作

    本节联练习主要有: 1.环境介绍 2.常用 Shell 命令及快捷键 3.Linux 使用小技巧 一.Linux 桌面环境介绍 相对于现在的 Windows 系统,UNIX/Linux 本身是没有图形 ...

  5. Ternsorflow 学习:003-MNIST入门有关概念

    前言 当我们开始学习编程的时候,第一件事往往是学习打印"HelloWorld".就好比编 程入门有 HelloWorld,机器学习入门有 MNIST. MNIST 是一个入门级的计 ...

  6. Linux入门-基本概念

    本文主要介绍linux基础概念介绍,对基本概念了解后,更好入门. 这里主要介绍一下几个概念 什么是linux GNU项目和自由软件基金会 linux发行版 什么是linux   也许大家都已经知道,L ...

  7. Mycat入门核心概念

      Mycat中的核心概念     Mycat中的核心概念 1.数据库中间件    Mycat 是一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而 Mycat 并没有 存储引擎,所以并 ...

  8. Vue 入门之概念

    Vue 简介 Vue 是一个前端的双向绑定类的框架,发音[读音 /vjuː/, 类似于 [view].新的 Vue 版本参考了 React 的部分设计,当然也有自己独特的地方,比如 Vue 的单文件组 ...

  9. vue入门——基本概念

    1. 挂载点,模板,实例的关系? 首先附上一个基本demo: <!DOCTYPE html> <html lang="en"> <head> & ...

随机推荐

  1. jquery横向纵向鼠标滚轮全屏切换

    html <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF- ...

  2. RPA简介

    开篇: 公司正在全面推广RPA,正好借此机会学习一下,发现国内对RPA的了解较少,萌生了在博客园开博,同时锻炼一下自己的输出能力,纯笔记,如有不足之处,请指正,共勉. 阅读目录: 1. 什么是RPA ...

  3. lr-web services协议

    1.web services协议简介 web services协议是建立可交互操作的分布式应用程序的新平台,它通过一系列标准和协议来保证程序之间的动态链接,其中最基本的协议包括soap,wsdl,ud ...

  4. 关于Url路径中出现特殊字符,文件无法下载的问题

    1.原网址  传送门:http://blog.csdn.net/jackljf/article/details/43796137 在站点根目录新建或编辑web.config 文件,找到<syst ...

  5. 关于以base64编码形式上传图片

    第一次用,记录一下 HTML中的样式 HTML代码 1 <li class="orther" style="padding-top: 15px;"> ...

  6. js中时间戳与日期格式的相互转换

    1. 将时间戳转换成日期格式: function timestampToTime(timestamp) { var date = new Date(timestamp * 1000);//时间戳为10 ...

  7. python小总结3(异常、单例设计模式)

    一.异常 AttributeError:试图访问一个对象没有的成员[属性和方法] ValueError:值错误,传入了一个不期望的值 ImportError:无法导入模块或者包:基本上路径问题 Ind ...

  8. Java之for循环嵌套练习

    1.打印4层*** ***** ***** ***** ***** class forfor{ public static void main(String[] args){ for(int y=0; ...

  9. Spring使用ioc注解方式配置bean

    context层 : 上下文环境/容器环境 applicationContext.xml 具体示例: 现在ioc容器中添加context层支持: 包括添加xmlns:context.xsi:schem ...

  10. Java判断当前时间是否在某一时间段内

    今天有一个任务,判断现在的时间是否在某一个时间段内 遇到的第一个问题 Date类获取日期时间大的方法失效了 问题描述: 在学习Date类时,习惯性的用get方法调用Date()的年月日,发现不怎么好用 ...