一、版本号的命名规则

大部分时候是在名字后面加些数字表示不同的版本。其中以加上年份号最为简单明了。比如 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. javascript高级程序设计第3版——第7章 函数表达式

    此张内容的难点在于闭包.而闭包又涉及到原型,原型链,执行上下环境,this的取值等知识点.(此章节对于闭包的内容篇幅较少,且写的很是艰涩难懂,推荐一位大牛的博客,对于闭包的前因后果以及作用机制写的很明 ...

  2. 微信小程序wx.previewImage实用案例(交流QQ群:604788754)

    本案例是可以滑动预览多张图片效果.(本案例在本地配置好之后,请扫描二维码到手机滑动预览.在开发者工具上预览,滑动不是很流畅) 图片必须选择远程图片,本地图片无法实现预览. 或是通过wx.chooseI ...

  3. JS-圣杯模式

    var inherit = (function(){ var F = function(){}; return function(Target,Origin){ F.prototype = Origi ...

  4. 数据库SQL优化大总结1之- 百万级数据库优化方案

    转载自:https://blog.csdn.net/wuhuagu_wuhuaguo/article/details/72875054

  5. Java集合类(转自hey平平)

    一.集合与数组 数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用. 集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用. ...

  6. Python小札

    在Python中,等号(=)是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量如: a = 123 #a是整数 print(a) a = 'ABC' #a变为字 ...

  7. SpringBoot Actuator

    SpringBoot Actuator 提供了检查项目内部信息的一整套API,通常在项目启动时可以看到. 1.引入依赖包 <dependency> <groupId>org.s ...

  8. UnboundLocalError: local variable 'f' referenced before assignment

    参考方案链接: 1.http://blog.chinaunix.net/uid-631981-id-3766212.html 2.http://blog.sina.com.cn/s/blog_4b9e ...

  9. 常用命令和sql

    常用命令: mvn idea:idea //生成.ipr项目文件 mvn clean install -Dmaven.test.skip=true mvn install:install-file - ...

  10. CEPH集群操作入门--部署和运维

    部署 预检和安装Ceph 参考 虚拟机使用ceph-deploy安装ceph 创建群集 添加/删除监视器 密钥管理 添加/删除OSD 添加/删除MDS 清除主机 管理任务   运维 操作群集 健康检查 ...