.Net理论常识整理——第一日

开篇先感谢明哥,谢谢你的鼓励、支持与引导!你懂的!

跟导师做项目,使用asp.net已经有段时间了,但是对于.net的理论知识,似乎有个模糊的概念,但是细想一下又想不起来,想来我是过于注重coding,误入了学习的歧途!所以决心扎扎实实的打好基础,用文字记录下成长的过程!

1、什么是.NET?

对于这个,我表示我之前真的没有认认真真的去思考及查阅资料过,忏悔~~~~

微软首席执行官的鲍尔默说:“Microsoft.Net代表了一个集合、一个环境、一个可以作为平台支持下一代Internet的可编程结构”。

来自微软官方的解释是:Microsoft.NET 是 Microsoft XML Web services 平台。XML Web services 允许应用程序通过 Internet 进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。Microsoft .NET 平台提供创建 XML Web services 并将这些服务集成在一起之所需。对个人用户的好处是无缝的、吸引人的体验。

.net是一个平台,技术人员在这个平台上创建应用系统。

      一个.NET应用是一个使用.NET Framework类库来编写,并运行于CLR之上的应用程序。

2、.NET Framework与.NET Framework SDK

.NET Framework是微软开发的运行于各个操作系统之上的.NET软件运行平台,相对独立于微软的各个操作系统之上。即.NET Framework是.net程序的运行环境。

.NET Framework SDK包括了微软提供的.NET 语言编译器、完整的.NET Framework文档,以及各种工具。目前只有两个版本:.NET Framework SDK V1.1版、.NET Framework SDK V2.0版。.NET Framework SDK是开发环境,没有安装就不能做.net开发。

3、Microsoft.Net框架图如下:


Microsoft.NET Framework类库是一个综合性的类型集合,用于应用程序开发的一些支持性的通用功能。开发人员可以使用它开发多种模式的应用程序,可以是命令行形式,也可以是图形界面形式的应用。Microsoft.NET Framework中主要包括以下类库:数据库访问(ADO.NET等)、XML支持、目录服务(LDAP等)、正则表达式和消息支持。

基类库提供了支持底层操作的一系列通用功能。Microsoft.NET框架主要覆盖了集合操作、线程支持、代码生成、输入输出(IO)、映射和安全等领域的内容。

.net的一个显著特点就是它的多语言支持。所有Microsoft.NET 支持的语言,不管是Visual Basic .NET 、VisualC++、C# 还是Jscript .NET编写的代码都被编译成一种中间代码,在CLR中运行。


MSIL是一个中间语言,是由编译器编译而来的,属于第一次编译的产物。第二次编译通过CLR将MSIL转换为具体CPU的代码(本机代码)。


CLR(Common Language Runtime)是公共语言运行时,它为多种语言提供了一种统一的运行环境。CLR和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集),并保证应用和底层操作系统之间必要的分离。它提供了异常处理、安全、调试以及任何语言的版本支持等功能。它可以使用各种程序设计语言,并提供跨语言的公共工具集,从而确保了代码之间的互用性。

有了CLR,就可以很容易地设计出对象能够跨语言交互的组件和应用程序。也就是说,用不同语言编写的对象可以互相通信,并且它们的行为可以紧密集成。例如,可以定义一个类,然后使用不同的语言从原始类派生出另一个类或调用原始类的方法。还可以将一个类的实例传递到用不同的语言编写的另一个类的方法。这种跨语言集成之所以成为可能,是因为基于CLR的语言编译器和工具使用由CLR定义的通用类型系统,而且它们遵CLR关于定义新类型以及创建、使用、保持和绑定到类型的规则。


.net的另一个重要特点就是它的多平台支持。不过相对于 Java 技术能够跨越 UNIX、Linux 和Windows 等众多平台,目前Microsoft .NET 的跨平台性仅限于各种Windows 操作系统。

4、托管代码与非托管代码

托管代码是在.NET基础上开发出来的代码,这些代码经编译成MSIL后,在CLR的JIT即时编译后在CLR托管运行。

MSIL不能直接在电脑上运行,它被封装在一个叫 程序集(assembly)的文件中,程序集中包含了描述你所创建的类,方法和属性的所以元数据。这个CLR会给你的运行代码提供各种各样的服务,通常说,他会加载和验证程序集,一次来保证中间语言的正确性。当某些方法被调用的时候,运行库把具体的方法编译成适合本地计算机运行的机械代码,然后会把编译好的机械代码缓存起来,以备下次调用(这就是JIT)。随着程序的集的运行,运行库会持续地提供各种服务,例如安全,内存管理,线程管理等等。


非托管代码:不是在在.NET的基础上开发出来的代码,如C/C++/vb开发出来的COM组件或者API,它们一旦编译后就编译成基于OS的本地代码,它们直接与OS通信,中间没有经过CLR这个中间者,而且内存等管理是手动管理的,此类代码称之为非托管代码。非托管代码不能享受一些运行库所提供的服务,例如安全和内存管理等。如果非托管代码需要内存管理等服务,就必须显式的调用操作系统的接口。通常来说,它们会调用Windows API所提供的API来实现。

5、JIT是如何加载编译程序集的?

JIT:即时编译(Just In-Time compile),这是.NET运行可执行程序的基本方式,也就是在需要运行的时候,才将对应的IL代码编译为本机指令。传入JIT的是IL代码,输出的是本机代码,所以部分加密软件通过挂钩JIT来进行IL加密,同时又保证程序正常运行。同解释执行的代码相比,JIT的执行效率要高很多。

JIT并非所以using引用的程序集都加载编译的,它只加载编译要用到的程序集,故把一个类作为一个类文件编译成一个组件或者说是程序集,比把几个类写成一个文件编译成一个程序集,可以减少很多的加载编译量,所以最好一个功能,一个类单独写成一个程序集。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值