C#温故而知新—闲话.Net
在Java搞得如火如荼时,微软为了巩固自己的霸主地位,自然要来分一杯羹,于是.NET应运而生。
- .Net的战略。
NET是一种面向网络、支持各种用户终端的开发平台环境。.NET的特点:
- 软件即服务(SaaS)
微软的.NET战略意味着:微软公司以及在微软平台上的开发者将会制造服务,而不是制造软件。在未来几年之内,微软将陆续发布有关.Net的平台和工具,用于在因特网上开发web服务。那时,工作在.Net上的用户、开发人员和ET工作人员都不再购买软件、安装软件和维护软件。取而代之的是,他们将定制服务,软件会自动安装,所有的维护和升级也会通过互联网进行。
- 基于XML的共同语言
XML是一种标记语言。作为元语言,它可以定义不同种类应用的数据交换语言。在.NET体系结构中,XML作为一种应用间无缝接合的手段,用于多种应用之间的数据采集与合并.用于不同应用之间的互操作和协同工作。
- 融合多种设备和平台
随着Internet逐渐成为一个信息和数据的中心,各种设备和服务已经或正在接入和融入Internet,成为其中的一部分。.Net谋求与各种Internet接入设备和平台的一体化,主要关注在无线设备和家庭网络设备及相关软件、平台方面。
- 新一代的人机界面
新一代人机界面主要体现在"智能与互动"两个方面。.Net包括通过自然语音、视觉、手写等多种模式的输入和表现方法;基于XML的可编辑复合信息架构——通用画布;个性化的信息代理服务:使机器能够更好地进行自动处理的智能标记等技术。
- CLI
微软给.NET绘制了一幅美好的蓝图,提出了一套公共语言架构(CLI)。先来看看CLI到底为何物。
CLI包含了CTS (Common type system, 通用类型系统), CIL (Common Intermediate Language, 公共中间语言)。图中的CLS (Common Language Specification, 公共语言规范)是 CTS的子集, 所有与CLI兼容的编程语言都必须遵守它
微软是这么解释CLS的:
CLS 规则定义了通用类型系统的子集,即所有适用于公共类型系统的规则都适用于 CLS,除非 CLS 中定义了更严格的规则。CLS 通过定义一组开发人员可以确信在多种语言中都可用的功能来增强和确保语言互用性。CLS 还建立了 CLS 遵从性要求,这帮助您确定您的托管代码是否符合 CLS 以及一个给定的工具对托管代码(该代码是使用 CLS 功能的)开发的支持程度。
CLI公共语言架构的核心是什么呢?这里包含了微软的野心,MS想通过这个架构实现向上无关性(跟具体语言无关)和向下无关性(与具体平台无关)。
只要遵从CLI,可以使用任何语言来开发程序(例如c#,c++),当然,这些语言需要符合CLS。程序开发好后编译器会将其编译为CIL(通用中间语言)。这个中间语言就牛X了,不管是什么语言开发的程序,编译后的CIL都是一样的,所以这也为不同语言的协作提供了方便。比如c++用来做数学运算比较方便,效率较高,大可以使用c++来编写数学计算的类库,然后在c#里调用这个类库。这便是向上无关性。
再来看看ms怎么实现向下无关性的。上面说了,程序编译的结果是CIL,那么在运行时,更具不同的平台,编译器只需要将CIL装换为相应的本地代码就能运行了。
- CLR
微软是靠Windows起家的,自然而然的,微软在Windows平台实现了CLI,结果就是我们今天的.NetFrameWork,包含.NET类库与CLR。
让我们来揭开CLR的面纱。
CLR (Common Language Runtime, 公共语言运行库) : MS用于Windows 的CLI实现
.NetFrameWork提供了一个运行时环境,叫做公共语言运行时(CLR),它管理着代码的执行,并使得开发过程变得更加简单。可以将它想象为一个虚拟机,它为各种.NET应用提供了一个高性能的、抽象于底层操作系统和硬件环境的运行时环境。
CLR的主要功能 :
- 管理代码的执行
- 提供通用类型系统
- 提供系统服务
NetFrameWork程序的运行过程
编写代码à编译成中间语言MSIL(Microsoft Intermediate Language,微软中间语言)à执行时被即时(JIT)编译器编译成为本地代码à运行在CLR (Common Language Runtime, 公共语言运行库)
- 【Java SE】Java NIO系列教程(三) Buffer
- android混淆
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](三)
- 两个activity或者activity和fragment传值
- 【强烈推荐】Java工程师如何从一名普通的码农成长为一位大神
- Remoting: Server encountered an internal error
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](四)
- 在mono 3.0 下运行ASP.NET 4网站的主意事项
- 《干货系列》SQL语句-知无不言言无不尽
- OutOfMemoryError异常系列之方法区溢出和运行时常量溢出池溢出
- 代码转换工具 Code Converter 2013
- OutOfMemoryError异常系列之Java堆溢出
- android ndk之hello world
- ScheduledExecutorService和timer的异同
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 如何从Node.js开始-Visual Studio2017
- Rust竟然没有异常处理?
- MAC系统 JDK 卸载及彻底删除
- 轻松学Pytorch –Mask-RCNN图像实例分割
- docker安装awvs13
- 远程连接kail Permission denied或者refused【已解决】
- 设计模式~原始模型模式(二)
- 面向对象的7种设计原则(6)-迪米特原则
- LeetCode 刷题记录 1-5
- 你掉的是这个免费服务器,还是这个 Docker 实验平台
- 我能赢吗
- 最长公共子串/序列问题
- 个性化终端 | zsh bash oh-my-zsh
- VirtualBox无限嵌套方法 | 虚拟机套娃
- Win10 LTSC 激活方法 | Win10专业版(永久激活)长期服务版 LTSC 2019密钥