C#入门基本概念
一、版本号的命名规则
大部分时候是在名字后面加些数字表示不同的版本。其中以加上年份号最为简单明了。比如 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#入门基本概念的更多相关文章
- MongoDB入门必读(概念与实战并重)
MongoDB入门必读(概念与实战并重) 一.概述 MongoDB是一个基于分布式文件存储的数据库开源项目.由C++语言编写.旨在为WEB应用提供可护展的高性能数据存储解决方案. MongoDB是一个 ...
- 【转帖】H5 手机 App 开发入门:概念篇
H5 手机 App 开发入门:概念篇 http://www.ruanyifeng.com/blog/2019/12/hybrid-app-concepts.html 作者: 阮一峰 日期: 2019年 ...
- Git 入门:概念、原理、使用
出处: git入门:概念.原理.使用 git和Github 概念 Git --- 版本控制工具(命令). git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.git ...
- (大数据工程师学习路径)第一步 Linux 基础入门----基本概念及操作
本节联练习主要有: 1.环境介绍 2.常用 Shell 命令及快捷键 3.Linux 使用小技巧 一.Linux 桌面环境介绍 相对于现在的 Windows 系统,UNIX/Linux 本身是没有图形 ...
- Ternsorflow 学习:003-MNIST入门有关概念
前言 当我们开始学习编程的时候,第一件事往往是学习打印"HelloWorld".就好比编 程入门有 HelloWorld,机器学习入门有 MNIST. MNIST 是一个入门级的计 ...
- Linux入门-基本概念
本文主要介绍linux基础概念介绍,对基本概念了解后,更好入门. 这里主要介绍一下几个概念 什么是linux GNU项目和自由软件基金会 linux发行版 什么是linux 也许大家都已经知道,L ...
- Mycat入门核心概念
Mycat中的核心概念 Mycat中的核心概念 1.数据库中间件 Mycat 是一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而 Mycat 并没有 存储引擎,所以并 ...
- Vue 入门之概念
Vue 简介 Vue 是一个前端的双向绑定类的框架,发音[读音 /vjuː/, 类似于 [view].新的 Vue 版本参考了 React 的部分设计,当然也有自己独特的地方,比如 Vue 的单文件组 ...
- vue入门——基本概念
1. 挂载点,模板,实例的关系? 首先附上一个基本demo: <!DOCTYPE html> <html lang="en"> <head> & ...
随机推荐
- Public_1.bat
:: targetset targetFileName=Public_2set targetPath=./:: sourceset sourceFileName=Public_1@echo ui ru ...
- Introduction of Servlet Filter(介绍javaweb组件之一过滤器filter)
javaweb的三大组件都需要交给web服务器运行,都需要在web.xml文件中配置. ①Servlet:javax.servlet.Servlet通过http协议接受客户端的请求,并作出响应的Jav ...
- 前端页面的适配使用rem换算
前端页面的适配使用rem换算 https://www.cnblogs.com/liangxuru/p/6970629.html 注:本文转载之处:https://www.cnblogs.com/ann ...
- 基于MAVEN使用IDEA创建dubbo入门项目图文教程
花了很长时间没有找到一个很详细的图文教程来学习dubbo入门框架,故记录下来. 一: 项目工程目录 简单介绍项目目录结构: 二: 创建父工程 具体操作步骤: 1,打开IDEA,按下面步骤来 File- ...
- mvc route .html 后缀 404
<system.webServer> <validation validateIntegratedModeConfiguration="false" /&g ...
- mysql开启远程登陆(修改数据表和授权两种方法)
一.确认防火墙没有阻止3306端口(一般服务器默认会屏蔽掉) windows防火墙例外设置方法 控制面板(右上角选择查看方式为大图标)---防火墙---高级设置---高级设置---出站规则---最右边 ...
- java基础2(二)
Servlet 注意: servletConfig可以获取配置文件(xml文件)中配置的servlet对象的初始化参数. url-pattern 缺省servlet 注意:tomcat目录下有一个默认 ...
- Docker run 命令
docker run -d -p 8084:80 --name weather --restart always --link fme-postgis 192.168.1.220:5000/weath ...
- 虚拟机 linux 没有分配id
输入命令 $ vim /etc/sysconfig/network-scripts/ifcfg-ens33 将ONBOOT=no改为ONBOOT=yes 输入命令 $ :wq ...
- 【译】PX、EM还是REM媒体查询?
原文链接:https://zellwk.com/blog/media-query-units/ 你有没有想过使用媒体查询的时候到底该用px.em还是rem作单位呢?我曾经也有同样的疑问,而且我到现在也 ...