.net基础概念

.net基础概念

1.       .NET Framework

是支持生成和运行下一代应用程序和 XML Web services 的内部 Windows 组件。.NET Framework 具有两个主要组件:公共语言运行库(Common Language Runtime.NET Framework 类库(Framework Class Library

2.       公共语言运行库)(Common Language Runtime

是 .NET Framework 的基础。可以将运行库看作一个在执行时管理代码的代理,它提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。事实上,代码管理的概念是运行库的基本原则。以运行库为目标的代码称为托管代码,而不以运行库为目标的代码称为非托管代码。以下是CLR提供的服务:

Ø         代码管理(加载和执行)

Ø         应用程序内存隔离

Ø         类型安全验证

Ø         IL 到本机代码的转换

Ø         对元数据(增强型类型信息)的访问

Ø         托管对象内存的管理

Ø         代码访问安全性的强制

Ø         异常处理,包括语言间异常

Ø         托管代码、COM 对象和预先存在的 DLL(非托管代码和数据)间的相互操作

Ø         对象布局的自动化

Ø        对开发人员服务的支持(分析、调试等等)

3.       .NET Framework 类库(Framework Class Library

它是一个综合性的面向对象的可重用类型集合,可以使用它开发多种应用程序,这些应用程序包括传统的命令行或图形用户界面 (GUI) 应用程序,也包括基于 ASP.NET 所提供的最新创新的应用程序(如 Web 窗体和 XML Web services)。它可以完成以前要通过Windows API来完成的绝大多数任务。

4.       托管代码 (managed code)

由公共语言运行库环境(而不是直接由操作系统)执行的代码。托管代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检查和安全支持等。这些服务帮助提供独立于平台和语言的、统一的托管代码应用程序行为。托管代码有以下优点:

Ø        平台无关性。源代码先编译成中间语言,运行时由CLR将中间语言编译成平台专用的代码,跟Java的字节代码一样,这样即可实现平台无关性。

Ø        提高性能。首先,IL比Java的字节码作用还要大,因为IL是即时编译的,而Java的字节码常常是解释性的,在转换为平台可执行代码的时候可能会导致性能损失。其次,.NET的即时编译器(JIT)(Just In Time)并非一次把全部代码编译完才执行,而是只编译调用的那部分代码,并把得到的这部分内部可执行代码保存起来,下次需要调用的时候无须重新编译。Microsoft认为这个过程要比一开始编译整个应用程序代码的效率高得多,因为任何程序的大部分代码实际上并不是在每次运行过程中都执行。最后,传统的编译器会优化代码,但它们的优化过程是独立于代码所运行的特定处理器的。例如Visual Studio 6优化了一台一般的Pentium机器,它所生成的代码就不能利用Pentium Ш处理器的硬件特性。而JIT与平台无关,所以它可以针对不同的机器完成不同的优化。

Ø        语言的互操作性。互操作性即能将任何一种语言编译为中间代码,编译好的代码可以与从其它语言编译过来的代码进行交互操作。在.NET中可以交互操作的语言有C#、VB.NET、Visual C++.NET、Visual J#、脚本语言、COM和COM+。

5.       非托管代码(Unmanaged Code)

在公共语言运行库环境的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;它与托管代码不同,后者从公共语言运行库中获得这些服务。

6.       中间语言(MSIL

中间语言(MSIL)在.NET Framework中有非常重要的作用,所有面向.NET的语言都要先编译成IL,那么它们在逻辑上都需要支持IL的 主要特征。MSIL是将.Net代码转化为机器语言的一个中间过程。它是一种介于高级语言和基于Intel的汇编语言的伪汇编语言。当用户编译一 个.Net程序时,编译器将源代码翻译成一组可以有效地转换为本机代码且独立于CPU 的指令。当执行这些指令时,实时(JIT)编译器将它们转化为CPU特定的代码。由于公共语言运行库支持多种实时编译器,因此同一段MSIL代码可以被不 同的编译器实时编译并运行在不同的结构上。从理论上来说,MSIL将消除多年以来业界中不同语言之间的纷争。在.Net的世界中可能出现下面的情况:一部 分代码可以用Effil实现,另一部分代码使用C#或VB完成的,但是最后这些代码都将被转换为中间语言。这给程序员提供了极大的灵活性,程序员可以选择 自己熟悉的语言,并且再也不用为学习不断推出的新语言而烦恼了。

7.       CTS(Common Type System,通用类型系统)

类 型是数据的一种表达方式,不同编程语言定义的基本数据类型各不相同。既然要实现语言之间的“沟通”,就需要一个规范来实现“不同”数据类型(也许只是名称 不同,而实质相同)间的映射关系。便于使用.Net Framework在各种语言之间进行交互操作。CTS就完成这个工作。

8.       JIT(Just-In-Time)

从全称也可以看出:强调实时,也就是中间代码实时执行时,才针对本地计算机的不同,被编译成本机代码。

9.       程序集(Assembly)

是.NET
程序的最小组成单位。每个程序集都有自己的名称、版本等信息。程序集通常表现为一个文件(.exe或.dll文件),这样的程序集被称为单文件程序集,这
种程序集是最常见的。程序集也可以由多个文件组成,每个文件都是一个模块文件或者是一个资源文件,这样的程序集被称为多文件程序集。下面来了解一下如何生
成单文件程序集和多文件程序集。

10.    PE(可移植可执行Portable Executable)文件

    PE文件是一个非常重要的概念,它由PE表头、CLR表头、元数据和IL(中间语言)代码四部分组成。

Ø        PE表头:主要指出了文件的类型,GUI(图形用户)、CUI(控制台)或是DLL(在.NET中DLL特指程序集文件的一种形式,不同于以前的动态链接库文件)。
    另外该表头还包括一个时间标记用于表示文件创建的时间。对于仅包含IL代码的模块该表头的大部分信息会被忽略。对于包含有本地CPU代码的模块,
    该表头还会包含有关本地CPU代码的一些信息。

Ø         CLR表头:包含标识托管模块的一些信息(可以被CLR或者一些使用工具解析)。这些信息包括托管模块所需要的CLR版本号,一些标记,托管模块入口点
    方法(MethodDef)元数据标记,以及有关托管模块的元数据、资源、强命名标记和其他一些意义不是太大的信息的位置和尺寸。

Ø     【元数据】(表):该表用于描述代码中用到的类型和成员,描述的类型和成员有两类,一是源代码中定义,一是引用的。元数据总是和包含IL代码的文件

相关联,实际上元数据总是和这些代码一起被嵌入到同一个exe/dll文件中,编译器总是同时产生元数据和IL代码,并且总是同时将它们嵌入到生产的托管模

块中,两者始终保持同步。
        元数据的用处:
        @元数据省去了源代码编译时对头文件和库文件的需求。这是因为在含有实现类型和成员的IL代码文件中,已经包含了所有被引用的类型和成员的信息,
           编译器可以直接从托管模块中读取元数据来获得这些信息。
        @Visual Studio.NET的智能感知(Intellisense)功能是通过分析元数据来实现的。
        @CLR代码验证过程可以利用元数据来确保代码仅执行“安全”的操作。
        @利用元数据,可以将一个对象的字段序列化后发送到远程机器,然后在远程机器上执行反序列化,从而重新创建对象和它的状态。
        @利用元数据,垃圾收集器可以追踪对象的生存期。对于任何对象,垃圾收集器都能通过元数据来确定该对象的类型,并且可以获知该对象的哪些字段引
          用了其他对象。

Ø     IL代码:编译器在编译源代码是产生的指令,CLR运行时将它们编译成本地CPU指令。

11.       托管模块(managed module

托管模块是一个需要CLR才能执行的可移植可执行(Portable executeable 简称PE) 文件。

.net基础概念

时间: 2024-12-25 14:22:51

.net基础概念的相关文章

关系型数据库常用基础概念知识归纳

声明:我的文章都是只挑主要的写,次要细节太多,归纳就没意义了,同时归纳主要是给自己看的, 而且基本都是凭自己的一些记忆和理解即时写的.不一定对和全(但大多是一些需要理解的概念),请各位看管见谅! 数据库设计篇 1.范式 A.1范式,原子性,即列不可分 B.2范式,完全依赖,即有个主键唯一区分 C.3范式,不能传递依赖,即表中不能还有其他表的非主键信息 2.模型 A.概念模型,即ER图等 B.逻辑模型,即建逻辑表 C.物理模型,即生成物理表 事务 1.四大特性, A.原子,要么..要么.. B.隔

分布式学习——基础概念篇

概述 最近这段时间一直在看分布式有关的东西,但是关于分布式自己还是不能很好的理解,所以本文对分布式基础概念进行下学习. 分布式处理 首先先了解一下分布式处理,分布式处理和集中式处理正好是相反的的体系架构,集中传输集中到式处理顾名思义就是将所有的信息都一个统一的信息中心进行处理:分布式处理就是将不同地点的,或具有不同功能的,或拥有不同数据的多台计算机利用通信网络连接起来,让各个计算机各自承担同一个工作任务的不同部分,在控制中心的管理下,同时运行,共同完成同一个工作任务. 提到分布式处理就不能不提到

js基础--javascript基础概念之语法

掌握一门语言 必须先掌握它的语法! javascript 的语法和C.Java.Perl 的语法有些相似.但是比它们更加宽松. javascript 中的一切都是严格区分大小写的.例如变量: demo 和 Demo 两个变量是完全不同的. javascript 标示符,所谓标示符 是指 变量.函数.属性 的名字或函数的参数.标示符的格式是按照以下规则组合的一个或多个字符. 1.第一个字符必须是字母,下划线,或 $ 符号. 2.其他字符可以是字母.下划线.$ . 或数字. 注意 不能把关键字 保留

js基础--javascript基础概念之数组(二)

js基础--javascript基础概念之数组 数组栈方法 数组可以像栈一样.栈是一种先进后出的数据结构,最先添加的数据最后一个出来.栈方法添加数据也称为 推入  移除数据称为 弹出. js为数值栈方法提供了 push()   和  pop() ;  两个方法. push() push() 方法接受参数就是你要添加进入到数组的值.push()  方法会将他们逐一添加到数组的末尾  数组的length属性会跟着更新数据. *push(多个数组元素值) 返回的修改后的数组长度 var array =

js基础--javascript基础概念之数组

js基础--javascript基础概念之数组 在ECMAScript 中 ,数组是很常用的数据类型,js中的数组和其他很多语言的数组有明显的区别.js的数组可以保持任何类型的数值,一个数组中可以保存着多个不同类型的数值.js数组大小(长度)是可以调整的.可以随着数据的添加自动增长数组长度. 创建数组: 一.数组字面量 数组字面量由一对包含数组项的方括号[]表示. var array = [ 'kin', 'cheong', 'change', 'hello', 'haha', 'hi' ];

Linux基础概念-----环境变量

Shell 环境变量 Shell也是应用程序,工作与用户模式 变量类型 整形 浮点型 字符型 布尔型 bash变量类型 本地变量:仅对当前Shell有效 局部变量:仅对局部代码段有效(函数) 环境变量:expor VAR_NAME=Value,对当前Shell及子Shell有效 位置变量:$1;$2 .... 特殊变量:$?;$!;$$ .... 查看环境变量 printenv export 查看所有变量 set bash的引号 双引号:弱引用,可以实现变量替换: 单引号:强引用,不替换,而显示

Linux基础概念-----Linux I/O重定向 ,管道

标准输入:键盘 标准输出:显示器 错误输出:显示器 FD:文件描述符:让程序可以文件交互,并且便于内核识别文件,打开的每一个文件都有一个描述符 程序在和文件交互式,通过文件描述符来进行交互,而非文件名,文件名是方便用户分别文件. Linux一切皆文件,所以标准输入,标准输出都有各自的文件描述符 标准输入描述符:0 标准输出描述符:1 标准错误输出描述符:2 将其默认数据流改为其他设备:IO重定向 输出重定向 > 覆盖重定向 >> 追加重定向 /dev/null  黑洞 只针对当前Shel

js基础--javascript基础概念之语句(二)

js基础--javascript基础概念之语句(二)label,break,continue.. break .  continue 语句. break  continue 语句用于在循环中精确控制代码的执行,其中break语句会立即退出循环,执行循环后面的语句. continue 则退出循环后返回到再次进入循环中. 如: var num = 0; for(var i = 0; i<=100; i++){ if(i >= 10){ break; } num = i; } alert(num);

iOS开发OC基础:OC基础概念总结,OC面向对象的思想

一.什么是OOP: OOP(Object Oriented Programming):面向对象编程 二.面向对象和面向过程的区别: 面向过程编程:分析解决问题的步骤,实现函数,依次使用面向对象编程:分解问题组成的对象,协调对象间的联系和通信,解决问题. 面向过程是以事件为中心,关心的是完成这个事件的详细步骤:面向对象是以事物为中心,关心的是事物应该具备的功能,而完成一个事件只是事物所有功能里面的一个小功能(以过程为中心,以对象为中心) 三.类和对象 对象定义了解决问题的步骤中的行为,不刻意完成一

Linux基础概念-----touch一个新文件背后发生的事情

一个普通用户在Shell下执行了一条命令,这背后发生了什么事情,是个人的一些总结,如果有不对的地方欢迎搭建指正,谢谢! touch /tmp/test.txt ####################################################################################### tom在Shell中执行这条命令,Shell将命令发给内核,并且判断命令是否存在,通过文件系统上的元数据判断tom是否有权限执行,内核从内存中加载出mkdir的指令