.Net基本术语

.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)。  

原文:http://lovablebox.spaces.live.com/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值