.NET中一些概念理解

公共语言运行库的工作方式         要想了解.Net Framework托管,我们需要从.Net的工作机制说起,.Net实际是上将你编写的代码编译成中间语言(MSIL),也就是说不管你使用C#还是VB.Net,都会编译成为一个MSIL,而不是本地机器码(根据特定的操作系统与特定的硬件环境生成的二进制代码)。
        在运行的程序的时候,首先必需启动.Net Framework(随操作系统启动的一个服务)来运行你的程序,也就是说.Net Framework是一个环境,你的程序不是运行在操作系统中,而是运行在.Net Framework中。.Net Framework会把你的程序编译成与本地机器相符合的二进制码,叫做Just-in-time(JIT,运行时编译),运行时编译是一种按需编译的机制。 这个过程就是.Net Framework托管了,在你的程序被.Net Framework托管的时候,.Net Framework会为你的程序提供垃圾回收机制,直到运行的程序生命周期结束。
       Reflector是由微软员工Lutz Roeder编写的免费程序。Reflector的出现使.NET程序员眼前豁然开朗,因为这个免费工具可以将.NET程序集中的中间语言反编译成C#或者Visual Basic代码。除了能将IL转换为C#或Visual Basic以外,Reflector还能够提供程序集中类及其成员的概要信息、提供查看程序集中IL的能力以及提供对第三方插件的支持。 .NET类库指的就是.NET平台所用语言实现各种功能的类的集合。
以C#为例,源程序文件*.cs里一般都有下面的声明:
using System; //系统类
using System.Windows; //WINFORM类
using System.Web //WebForm类
//上边是微软定义的类,很多这样的类,组成类库
每个类里边有很多现成的方法,声明后直接使用就是了,不用自己去慢慢编程
//当然你自己慢慢编程也可以,做好自己的类库,声明如下就可以使用了
using MyCompany;
using MyCompany.Test;
.NETFramework类库
         .NET Framework 包括可加快和优化开发过程并提供对系统功能的访问的类、接口和值类型。 为了便于语言之间进行交互操作,大多数 .NET Framework 类型都符合 CLS,因而可在编译器符合公共语言规范 (CLS) 的任何编程语言中使用。 .NET Framework 类型是生成 .NET 应用程序、组件和控件的基础。 .NET Framework 包括的类型可执行下列功能:表示基础数据类型和异常。 封装数据结构。 执行 I/O。 访问关于加载类型的信息。 调用 .NET Framework 安全检查。 提供数据访问、多客户端 GUI 和服务器控制的客户端 GUI。 .NET Framework 提供了一组丰富的接口以及抽象类和具体(非抽象)类。 可以按原样使用这些具体的类,或者在多数情况下从这些类派生您自己的类。 若要使用接口的功能,既可以创建实现接口的类,也可以从某个实现接口的 .NET Framework 类中派生类。
命名约定
        .NET Framework 类型使用点语法命名方案,该方案隐含了层次结构的意思。 此技术将相关类型分为不同的命名空间组,以便可以更容易地搜索和引用它们。 全名的第一部分(最右边的点之前的内容)是命名空间名。 全名的最后一部分是类型名。 例如,System.Collections.ArrayList 表示 ArrayList 类型,该类型属于 System.Collections 命名空间。 System.Collections 中的类型可用于操作对象集合。   此命名方案使扩展 .NET Framework 的库开发人员可以轻松创建分层类型组,并用一致的、带有提示性的方式对其进行命名。 它还允许用全名(即命名空间和类型名称)明确地标识类型,这样可以防止类型名称发生冲突。 库开发人员在创建命名空间的名称时应使用以下原则:“公司名称.技术名称”   例如,Microsoft.Word 命名空间就符合此原则。   利用命名模式将相关类型分组为命名空间是生成和记录类库的一种非常有用的方式。 但是,此命名方案对可见性、成员访问、继承、安全性或绑定无效。 一个命名空间可以被划分在多个程序集中,而单个程序集可以包含来自多个命名空间的类型。 程序集为公共语言运行时中的版本控制、部署、安全性、加载和可见性提供外形结构。 
公共语言运行库
        公共语言运行库 (common language runtime,CLR) 托管代码执行核心中的引擎。运行库为托管代码提供各种服务,如跨语言集成、代码访问安全性、对象生存期管理、调试和分析支持。

        公共语言运行库的功能通过编译器和工具公开,可以编写利用此托管执行环境的代码。语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析服务等。若要使公共语言运行库能够向托管代码提供服务,语言编译器必须生成一些元数据来描述代码中的类型、成员和引用。元数据与代码一起存储;每个可加载的公共语言运行库可移植执行 (PE) 文件都包含元数据。公共语言运行库使用元数据来完成以下任务:查找和加载类,在内存中安排实例,解析方法调用,生成本机代码,强制安全性,以及设置运行时上下文边界。公共语言运行库自动处理对象布局并管理对象引用,当不再使用对象时释放它们。按这种方式实现生存期管理的对象称为托管数据。垃圾回收消除了内存泄漏以及其他一些常见的编程错误。如果您编写的代码是托管代码,则可以在 .NET Framework 应用程序中使用托管数据、非托管数据或者同时使用这两种数据。由于语言编译器会提供自己的类型(如基元类型),因此您可能并不总是知道(或需要知道)这些数据是否是托管的。   有了公共语言运行库,就可以很容易地设计出对象能够跨语言交互的组件和应用程序。也就是说,用不同语言编写的对象可以互相通信,并且它们的行为可以紧密集成。例如,可以定义一个类,然后使用不同的语言从原始类派生出另一个类或调用原始类的方法。还可以将一个类的实例传递到用不同的语言编写的另一个类的方法。这种跨语言集成之所以成为可能,是因为基于公共语言运行库的语言编译器和工具使用由公共语言运行库定义的通用类型系统,而且它们遵循公共语言运行库关于定义新类型以及创建、使用、保持和绑定到类型的规则。   

        所有托管组件都带有生成它们所基于的组件和资源的信息,这些信息构成了元数据的一部分。公共语言运行库使用这些信息确保组件或应用程序具有它需要的所有内容的指定版本,这样就使代码不太可能由于某些未满足的依赖项而发生中断。注册信息和状态数据不再保存在注册表中(因为在注册表中建立和维护这些信息很困难)。取而代之的是,有关您定义的类型(及其依赖项)的信息作为元数据与代码存储在一起,这样大大降低了组件复制和移除任务的复杂性。语言编译器和工具公开公共语言运行库的功能的方式对于开发人员来说不仅很有用,而且很直观。这意味着,公共语言运行库的某些功能可能在一个环境中比在另一个环境中更突出。您对公共语言运行库的体验取决于所使用的语言编译器或工具。例如,如果您是一位 Visual Basic 开发人员,您可能会注意到:有了公共语言运行库,Visual Basic 语言的面向对象的功能比以前多了。
公共语言运行库的一些优点:  
性能得到了改进。
能够轻松使用用其他语言开发的组件。 
类库提供的可扩展类型。   
新的语言功能,如面向对象的编程的继承、接口和重载
;允许创建多线程的可缩放应用程序的显式自由线程处理支持;结构化异常处理和自定义属性支持。如果使用Visual C++.NET,则可以使用 C++ 托管扩展来编写托管代码。C++ 托管扩展提供了托管执行环境以及对您所熟悉的强大功能和富于表现力的数据类型的访问等优点。其他公共语言运行库功能包括:  
跨语言集成,特别是跨语言继承。   
垃圾回收,它管理对象生存期,使引用计数变得不再必要。   
自我描述的对象,它使得使用接口定义语言 (IDL) 不再是必要的
。编译一次即可在任何支持公共语言运行库的 CPU 和操作系统上运行的能力。还可以使用 C# 语言编写托管代码。
C# 语言提供了下列优点:   
完全面向对象的设计。   
非常强的类型安全。   
很好地融合了 Visual Basic 的简明性和 C++ 的强大功能。   
垃圾回收。类似于C和C++ 的语法和关键字。   
使用委托取代函数指针,从而增强了类型安全和安全性。函数指针通过unsafe C#关键字和C#编译器 (Csc.exe)的/unsafe 选项可用于非托管代码和数据。CLR的执行模型  
1、将源代码(vb、cs)编译成托管代模块。托管代码块由中间语言和元数据组成。   
2、将托管代码合并成程序集。   
3、加载公共语言运行库。   
4、执行程序集的代码。   
5、生成本地代码。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮特大熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值