.Net基本术语
.Net基本术语基本术语 2.1 什么是CLR? CLR = Common Language Runtime(通用语言运行时)。CLR是一套标准资源,(理论上)可以被任何.NET程序所利用,而不管使用哪种程序语言。Robert Schmidt(微软)在他的MSDN PDC#文章里,列举了如下CLR资源:面向对象的编程模型(继承、多态、异常处理和垃圾收集
.Net基本术语
2.1 什么是CLR?
CLR = Common Language Runtime(通用语言运行时)。CLR是一套标准资源,(理论上)可以被任何.NET程序所利用,而不管使用哪种程序语言。Robert Schmidt(微软)在他的MSDN PDC#文章里,列举了如下CLR资源:
-
面向对象的编程模型(继承、多态、异常处理和垃圾收集等)
-
安全模型
-
类型系统
-
所有.NET基类
-
许多.NET framework类
-
开发、调试和评测(profiling)工具
-
执行和代码管理
-
IL到本地代码(IL-to-native)转换器和优化器
这对于.NET世界来说意味着什么?不同程序语言的能力将比过去任何时候更加趋同,尽管显然并非所有语言都能支持所有CLR服务。
2.2 什么是CTS?
CTS = Common Type System(通用类型系统)。这是.NET运行时能够理解的一大套类型,因此,.NET应用程序就可以使用它们。不过要注意,并不是所有.NET语言都支持CTS中所有类型的。CTS是CLS的一个超集。
2.3 什么是CLS?
CLS = Common Language Specification(通用语言规范)。它是CTS的一个子集,所有.NET语言都将支持它。任何使用CLS兼容的类型的程序,都可以和以任何语言编写的.NET程序进行互操作。
理论上,这允许在不同的.NET语言之间进行非常紧密地互操作。比方说,允许一个C#类从一个VB类继承下来。
2.4 什么是IL?
IL = Intermediate Language(中间语言)。也称为MSIL(Microsoft Intermediate Language,微软中间语言)或CIL(Common Intermediate Language,通用中间语言)。所有.NET源代码(不管用哪种语言编写)都被编译成IL。当软件被安装时,IL转换为机器码,或在运行时被即时(Just-In-Time,JIT)编译器所处理。
2.5 什么是C#?
C#是微软设计的一门新语言,用于和.NET framework协作。在它的白皮书《C#介绍》(“Introduction to C#”)中,微软是这么描述C#的:
“C#是一门派生于C和C++的简单、现代、面向对象和类型安全的程序语言。C#(发音C sharp)坚实地植身于C和C++语言家族树中,并将很快为C和C++程序员所熟悉。C#目标是将Visual Basic的高生产力和C++的原生威力联合起来。”
把上面一段话中的“C#”用“Java”取而代之,你会发现这个说法依然挺好J
假如你是一名C++程序员,你可能乐意看看我的C# FAQ(英文:http://www.andymcm.com/csharpfaq.htm,中文:http://www.royaloo.com/articles/articles_2002/CSharpFAQ.htm)。
2.6 在.NET环境下,“托管(managed)”一词的含义是?
术语“托管(managed)”是许多混乱产生的起因,在.NET中,它被用于许多不同的地方,所表达的东西有着细微的差别。
托管代码(Managed code):.NET framewor为运行在它里面的程序提供了数个核心运行时服务,例如异常处理和安全。为了使这些服务能够运作起来,代码必须向运行时提供最起码的信息,这样的代码被称为托管代码。默认来说,所有C#和Visual Basic.NET代码都是托管的。VS7 C++代码缺省来说不是托管的,但可以通过指定命令行开关(/com+),使编译器生成托管代码。
托管数据(Managed data):这些数据由.NET运行时垃圾收集器进行配置和清除。C#和VB.NET数据总是托管的,默认来说,VS7 C++数据是非托管的,即使使用/com+开关也是如此,但可以用__gc关键字将其标记为托管的。
托管类(Managed classes):通常在C++托管扩展(Managed Extensions for C++)背景下谈及这个术语。当使用ME C++时,类别可标以__gc关键字。正如名字所暗示的,这意味着这个类的实体所占用的内存由垃圾收集器托管,但意思还不仅于此。这个类变成了一个完全交付给.NET大家庭的成员,它可享受.NET所带来的好处,同时也受.NET施加的有关制约。关于好处的一个例子是可以和其它语言编写的类很好地互操作,例如,一个managed C++类可以继承自一个VB类。关于约束的一个例子是,托管类只能继承自一个基类。
2.7 什么是反射(reflection)?
所有.NET编译器都为它们生成的模块(modules)中所定义的类型产生元数据(metadata),这些元数据和模块打包在一起(模块被打包于配件(assemblies)之中),并可通过反射机制(reflection)存取。System.Reflection名字空间中包含的类,可以用于“查询”模块/配件的类型。
使用反射来存取.NET元数据,非常类似于使用ITypeLib/ITypeInfo存取COM中的类型库数据,并且,它被用于类似的用途,比方说,决定数据类型尺寸,以用于跨越上下文/进程/机器边界列集(marshaling)数据。
反射还可以用于动态调用方法(methods)(参见System.Type.InvokeMember),或在运行时刻动态创建类型(参见System.Reflection.Emit.TypeBuilder)。
更多推荐
所有评论(0)