|
是由C#的"代码转IL编译器"(code-to-IL compiler,不是JIT编译器)生成的。代码转
IL编译器发送二进制元数据信息给PE文件,是以标准的方式发送的,不象C++编译器那样,为出口函数创建它们自己的修饰
名字。
你从元数据和可执行代码并存所获得的主要优势为,有关类型的信息同类型自身固定在一起,不会遍布很多地方。同
样有助于解决存在于COM中的版本问题。进一步地,你可以在相同的上下文中使用不同的版本库,因为库不仅被注册表引
用,也被包含在可执行代码中的元数据引用。
2.2.3通用语言规范
通用语言规范(CLS)并不是虚拟对象系统(VOS)真正的一部分,它是特殊的。CLS定义了VOS中的一个类型子集,也定义
了必须符合CLS的常规用法。
那么,对此有什么迷惑呢?如果一个类库遵守CLS规则,其它编程语言同样也遵守CLS规则,那么其它编程语言的客户也
可以使用类库。CLS是关于语言的交互可操作性(interoperability)。因此,常规用法必须仅遵循外部可访问项目
(externally visible items)如方法、属性和事件等等。
我所描述的优点是你可以做以下工作。用C#写一个组件,在VB中派生它,因加在VB中的功能是如此之强大,在C#中再
次从VB类派生它。只要所有的外部可访问项遵守CLS规则,这样是可行的。
我在这本书中出示的代码不关心CLS协定。但在构建你的类库时要注意到CLS协定。我提供了表2.1,用以给类型和外部
可访问项定义协定规则。
这个清单不完整。它仅包含一些很重要的项目。我不指出出现在本书中每一种类型的CLS协定,所以有个好主意:当你
寻找CLS协定时,至少应该用浏览该表,以了解哪种功能有效。不要担心你不熟悉这章表中的每一个含义,在这本书中你会
学到它们。
表2.1 通能语言规范中的类型和功能
bool
char
byte
short
int
long
float
double
string
object(所有对象之母)
Arrays(数组)
数组的维数必须是已知的(>=1),而且最小下标数必须为0。
要素类型必须是一个CLS类型。
类型(Types)
可以被抽象或隐藏。
零或更多的接口可以被实现。不同的接口允许拥有具有相同名字和签名的方法。
一个类型可以准确地从一个类型派生。允许成员被覆盖和被隐藏。
可以有零或更多的成员,它们是字段(fields)、方法、事件或者类型。
类型可以拥有零或更多个构造函数。
一种类型的可访问性可以是公共的或者对NGWS组件来说是局部的;但是,仅公共成员可以认为是类型接口的一部分。
所有的值型必须从系统值型继承。异常是一个枚举——它必须从系统枚举(System Enum)继承。
&nb上一页 [1] [2] [3] [4] [5] [6] 下一页 |
|
|
|
|
|
|
|