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, 公共语言运行库)
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(2)-easyui构建前端页面框架[附源码]
- 扬言毁灭人类的索菲亚再一次挑战了人类
- SQL Server 存储过程生成insert语句
- silverlight 背景透明
- .Net 转战 Android 4.4 日常笔记(1)--工具及环境搭建
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(33)-MVC 表单验证
- 如何利用深度学习识别千万张图片?
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(32)-swfupload多文件上传[附源码]
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(31)-MVC使用RDL报表
- 43 Hot Flex and ActionScript 3.0 APIs, tips and tools for Autumn 2008
- 异步数据存储
- 谈谈基于SQL Server 的Exception Handling[中篇]
- C# AD(Active Directory)域信息同步,组织单位、用户等信息查询
- 如何仅使用TensorFlow C+来训练深度神经网络
- 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 数组属性和方法
- ANSI-X99MAC算法和PBOC的3DES MAC算法
- 数据分析(EDA)学习总结!
- web.py 0.3 新手指南
- 详解一道字节跳动的二面题目,它太经典了!
- 使用R语言进行时间序列(arima,指数平滑)分析
- 用python多线程抓取网站图片,速度极快
- 偏最小二乘回归(PLSR)和主成分回归(PCR)
- R语言使用特征工程泰坦尼克号数据分析应用案例
- Rust FFI 编程 - Rust导出共享库04
- 使用结构化的标头字段改善HTTP
- c语言直接读写ini配置文件
- Rust FFI 编程 - Rust导出共享库03
- 【crossbeam系列】2 crossbeam-epoch:基于epoch的无锁“垃圾收集”
- java调用JNI总结
- 【Rust日报】2020-07-30 fixed_vec减少Rust数组冗余边界检查