关于.NET CLR的摘要

ZDNet软件频道 时间:2002-09-19 作者:BUILDER.COM |  我要评论()
本文关键词:
本文我们一起探讨开发人员如何运用CLR来达到多语言编程,以及讨论.NET CLR中的系统映象界面如何获取.NET对象的信息,最后,我们还剖析CLR对象运行过程所带来的影响。
当前,你也许时常听到这样一些消息:在.NET的通用语言运行时(CLR)可以允许开发人员采用多种语言来编写代码,然后把它们集成在.NET环境中使用(我早先就介绍过这一论题)。现在让我们一起探讨开发人员如何运用CLR来达到这一目的,以及讨论.NET CLR中的系统映象界面如何获取.NET对象的信息,最后,我们还剖析CLR对象运行过程所带来的影响。

代码例程和用法

Visual Studio .NET是.NET相关的应用程序开发工具,但并非唯一的.NET development tool。事实上,你无需采用Visual Studio .NET工具,.NET出售价钱是,900,普通MSDN是,700,如果购买这些,你的财政预算就会受到很大的限制。

幸运的是,Visual Studio .NET支持了third-party and legacy languages(FORTRAN, COBOL, Perl)。当然也可以选择当前流行开发工具:BASIC, C#,VB.NET, and C++。你所需要的只是基于流行开发工具的命令行编译器。

C程序设计

在C++中,程序员采用#include符号来包含COM对象的类结构,或是采用#import来引入其他C程序的变量/函数类型。在.NET的C++管理器中,采用#using,如#using <mscorlib.dll>方式。这样你就可以从任一其他.NET环境中引入其他的.NET类型,而不管这一环境是C, Perl, ADA或其他语言。

当需要编译一个C++程序时,程序员可以使用IDE设计环境或命令行方式。为了能在命令行方式下编译,一定要确保/CLR能生成.NET可执行程序,如:cl.exe MyFile.cpp /CLR /link /entry: main)(假设入口是main)

BASIC程序设计

编译一个.ENT PE的过程和编译Visual BASIC很相似,但它却更加适合Visual BASIC程序员,因为它采用了类名而不是库的文件名,输入关键词可运用在类模块中,如:Imports System
Public Module modSample
Sub Main()
Console.WriteLine (“Hello World!”)
End Sub
End Module

接着,可以运用命令行方式来编译,如:vbc.exe /t:exe /out:MyFile.exe MyFile.vb

系统映象

既然.NET PE能够广泛运用元数据,这样就可以很方便地访问程序中的数据。为了达到这一目的,你可以使用.NET环境中的系统映象功能。在C#中,一定注意把System.Reflection标记放在程序的开头,之后的代码中你就可以调用System.Reflection中的事件,如下所示:

 Assembly asmblyMyFile = Assembly.LoadFrom(“MyFile.exe”);
Module[] modMyFile = assmblyMyFile.GetModules();
Type[] typsMyFile = modMyFile[0].GetTypes();
Type oType = typsMyFile[0];
MethodInfo[] MyMethods = oType.GetMethods();

 
在一般情况下,返回事件一定包含GetHashCode, Equals, ToString及GetType,这四个事件对每一个.NET对象而言是很常用的。

运行时间的数据流程

在前面的章节中,我讲述了关于JIT程序和为什么IL直到需要它的时候才被编译成机器代码,但是在.NET程序运行时间时情况又怎么样呢?当CLR执行一个.NET PE时,执行引擎通过三个主要阶段:类载入,JIT编译器,管理本程序代码。

类传入

在类载入阶段,OS载入器读取元数据和代码模块并鉴别“入口点”。这一过程包括从硬盘上载入文件的类,获取类型信息,执行一些JIT集合,然后把控制权交给JIT编译器。

JIT编译器

当一个事件被触发及类已经被载入,JIT编译器检测并确保代码是“合法”,这就意味着所有的变量都是程序所支持的,这就是为什么VB.NET能处理不同的变量类型。为了能安全且有效的管理,不同的变量类型必须和通常的系统类型与一致。

管理本程序代码

类经过校核以后,JIT编译器就把IL交给本程序代码管理器,只要有一个事件发生这一过程就会出现。之后,类载入器识别到类已经载入并开始编译代码。经过编译后的代码还保存在内存中直到整个过程完成。

代码管理器

代码管理器专门处理从IL编译到本机代码的类。它执行其他没有处理的函数和一些异常处理。

开始循环

现在你已经掌握了如何利用CLR来编写不同语言的程序然后统一放在集成环境中编译的知识。只要支持CLR的集成环境都可以运行。CLS,CTS及IL开发人员及相关指令,都能详细说明集成环境中的IL如何产生及其过程如何通过CLR来实现。


责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134