首页 > 编程 > .NET > 正文

.NET虚拟对象系统中的通用语言规范

2024-07-10 12:37:59
字体:
来源:转载
供稿:网友

通用语言规范(CLS)并不是虚拟对象系统(VOS)真正的一部分,它是特殊的。CLS定义了VOS中的一个类型子集,也定义了必须符合CLS的常规用法。

那么,对此有什么迷惑呢?如果一个类库遵守CLS规则,其它编程语言同样也遵守CLS规则,那么其它编程语言的客户也可以使用类库。CLS是关于语言的交互可操作性(interoperability)。因此,常规用法必须仅遵循外部可访问项目 (externally visible items)如方法、属性和事件等等。

我所描述的优点是你可以做以下工作。用C#写一个组件,在VB中派生它,因加在VB中的功能是如此之强大,在C#中再次从VB类派生它。只要所有的外部可访问项遵守CLS规则,这样是可行的。

我在这本书中出示的代码不关心CLS协定。但在构建你的类库时要注意到CLS协定。

这个清单不完整。它仅包含一些很重要的项目。我不指出出现在本书中每一种类型的CLS协定,所以有个好主意:当你寻找CLS协定时,至少应该浏览该表,以了解哪种功能有效。不要担心你不熟悉这张表中的每一个含义,在这本书中你会学到它们。

通能语言规范中的类型和功能

·bool    ·char   ·byte  ·short  ·int    ·long ·float ·double  ·string ·object(所有对象之母) 

Arrays(数组)

数组的维数必须是已知的(>=1),而且最小下标数必须为0。

元素类型必须是一个CLS类型。

类型(Types)

可以被抽象或隐藏。

零或更多的接口可以被实现。不同的接口允许拥有具有相同名字和签名的方法。

一个类型可以准确地从一个类型派生。允许成员被覆盖和被隐藏。

可以有零或更多的成员,它们是域成员、方法、事件或者类型。

类型可以拥有零或更多个构造函数。

一种类型的可访问性可以是公共的或者对NGWS组件来说是局部的;但是,只有公共成员可以认为是类型接口的一部分。

所有的值型必须从系统值型继承。异常是一个枚举——它必须从系统枚举(System Enum)继承。

类型成员

类型成员允许隐藏或者覆盖另一种类型中的其它成员。

参数和返回值的类型都必须是 CLS 协定类型。

构造函数、方法和属性可以被重载。

一个类型可以有抽象成员,但仅当类型不被封装时。

方法

一种方法可以是静态、虚拟或者实例。

虚拟和实例方法可以是抽象的,或者是一个实现。静态方法必须总拥有一个实现。

虚拟方法可能是最后的(或者不是)。

域成员

可以是静态或者是非静态。

静态域成员可以被描述或只初始化。

属性

当获取和设置方法而不是使用属性语法时,属性可以公开。

获取的返回类型和设置方法的第一个参数必须是相同的CLS类型——属性的类型。

属性名字必须不同,不同的属性类型用于区分是不充分的。

由于使用方法实现属性访问,如果 PropertyName 是同一个类中定义的一个属性,你不能实现命名为 get_PropertyName 和 set_PropertyName 的方法。

属性可以被索引。

属性访问必须遵循这种命名格式:get_ProName,set_PropName。

枚举

强调类型必须是byte、short、int 或long。

每一个成员是一个枚举类型的静态描述域成员

一个枚举不能实现任何接口。

你允许给多个域成员设定相同的值。

一个枚举必须继承系统枚举(隐含在C#中)

异常

可以被引发和被捕获。

自定义异常必须继承系统异常。

接口

可需要实现其它接口。

一个接口可以定义属性、事件和虚拟方法。实现取决于派生类。

事件

要么都进行增加方法和取消方法,要么都不进行。每一种方法采用一个参数,它是从系统代表元(System Delegate)派生下来的一个类。

自定义属性

可以仅使用下列类型:Type(类型),char, char, bool, byte, short, int, long, float, double, enum (一种CLS 类型), and object.

代表元(Delegates)

可以被创建和被激活

标识符(Identifiers)

一个标识符的第一个字母必须来自一限制集。

通过大小写在单一范围内,不可能唯一地区别两个或更多个标识符(大小写不敏感)。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表