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++中,程序员采用#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)
编译一个.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编译器检测并确保代码是“合法”,这就意味着所有的变量都是程序所支持的,这就是为什么VB.NET能处理不同的变量类型。为了能安全且有效的管理,不同的变量类型必须和通常的系统类型与一致。
类经过校核以后,JIT编译器就把IL交给本程序代码管理器,只要有一个事件发生这一过程就会出现。之后,类载入器识别到类已经载入并开始编译代码。经过编译后的代码还保存在内存中直到整个过程完成。
代码管理器专门处理从IL编译到本机代码的类。它执行其他没有处理的函数和一些异常处理。
现在你已经掌握了如何利用CLR来编写不同语言的程序然后统一放在集成环境中编译的知识。只要支持CLR的集成环境都可以运行。CLS,CTS及IL开发人员及相关指令,都能详细说明集成环境中的IL如何产生及其过程如何通过CLR来实现。
欢迎评论或投稿