一、版本号的命名规则

大部分时候是在名字后面加些数字表示不同的版本。其中以加上年份号最为简单明了。比如 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. python----数据驱动ddt的使用

    一.安装ddtpip install ddt 二.数据驱动和代码驱动数据驱动:根据你提供的数据来进行测试,比如接口自动化测试框架ATP代码驱动:必须得写代码才能测试,比如unittest 三.使用数据 ...

  2. .NET controller传给view的bool类型

    问题: 在view中访问该变量是False,不是字符串,也不是bool类型的false. 解决方法: controller: ViewBag.Test = false; view中得到false值: ...

  3. iOS 性能优化总结

    卡顿产生的原因 在 VSync信号到来后,系统图形服务会通过 CADisplayLink等机制通知 App,App主线程开始在 CPU中计算显示内容,比如视图的创建.布局计算.图片解码.文本绘制等.随 ...

  4. linux服务器上使用find查杀webshell木马方法

    本文转自:http://ju.outofmemory.cn/entry/256317 只要从事互联网web开发的,都会碰上web站点被入侵的情况.这里我把查杀的一些方法采用随记的形式记录一下,一是方便 ...

  5. 八大排序算法详解(动图演示 思路分析 实例代码java 复杂度分析 适用场景)

    一.分类 1.内部排序和外部排序 内部排序:待排序记录存放在计算机随机存储器中(说简单点,就是内存)进行的排序过程. 外部排序:待排序记录的数量很大,以致于内存不能一次容纳全部记录,所以在排序过程中需 ...

  6. 关于HttpSession 和 Hibernate框架中 session异同点的简单解析

    快速理解: HttpSession中的session是一个容器用来盛基于会话机制的信息. 比喻:我把钱放进银行的保险柜里. 解析:我的钱就是我的信息,ID等 银行的保险柜就是session容器. Hi ...

  7. PDF 补丁丁 0.6.0.3326 版发布(修复提取图片的问题)

    新的 PDF 补丁丁已经发布. 新版本更新了 PDF 渲染引擎. 另外修复了网友提出的提取图片功能中的两个问题.

  8. 解决flask的502错误:upstream prematurely closed connection while reading response header from upstream

    我在使用 tiangolo/uwsgi-nginx-flask 部署flask应用的时候,经常运行一会儿就出现502错误,重新启动容器后,就恢复. 且经常会出现数据更新后,刷新结果不一致. docke ...

  9. python enumerate用法总结

    enumerate()说明enumerate()是python的内置函数enumerate在字典上是枚举.列举的意思对于一个可迭代的(iterable)/可遍历的对象(如列表.字符串),enumera ...

  10. tp备份数据

    <?php namespace Chenlin2103\Controller; class BaksqlController extends MainController{ public $co ...