比如,给定声明
var I, J: Integer;
procedure Add(A: array of Integer);
你可以使用下面的语句调用Add过程
Add([5, 7, I, I + J]);
这等同于
var Temp: array[0..3] of Integer;
...
Temp[0] := 5;
Temp[1] := 7;
Temp[2] := I;
Temp[3] := I + J;
Add(Temp);
开放数组构造器只能当作数值参数或常量参数传递。构造器中的表达式必须和数组参数的基础类型是赋值兼容的。对于Variant开放数组参数,表达式可以是不同的类型。
- 94 -
Classes and objects
Classes and objects(类和对象)
Classes and objects: Overview(概述)
类(或者类类型)定义了一个结构,它包括字段(也称为域)、方法和属性;类的实例叫做对象;类的字段、方法和属性被称为它的部件(components)或成员。
? 字段在本质上是一个对象的变量。和记录的字段类似,类的字段表示一个类实例的数据项;
? 方法是一个过程或者函数,它和类相关联。绝大多数方法作用在对象(也就是类的实例)上,其它
一些方法(称为类方法)作用在类上面。
? 属性被看作是访问对象的数据的接口,对象的数据通常用字段来存储。属性有存取设定,它决定数
据如何被读取或修改。从程序的其它地方(在对象本身以外)来看,属性在很大程度上就像一个字段(但本质上它相当于方法,比如在类的实例中并不为它分配内存)。
对象被动态分配一个内存块,内存结构由类类型决定。每个对象拥有类中所定义的每个字段的唯一拷贝,但一个类的所有实例共享相同的方法。对象分别通过称为构造函数和析构函数
一个类变量实际是一个指针,它引用一个对象(称它为对象引用),所以,多个变量可以指向同一个对象。像其它指针一样,一个类变量的值可以是nil。虽然类变量是一个指针,但我们直接用它来表示一个对象,例如,SomeObject.Size := 100是把对象的Size属性设为100,你不能用下面的命令给它赋值:SomeObject^.Size := 100。
Class types(类类型)
About class types(关于类类型)
类类型必须在实例化之前进行声明并给定一个名称(不能在变量声明中定义一个类类型)
(program)或单元(unit)的最外层声明类,而不能在过程或函数中声明。
一个类声明有如下格式
type className = class (ancestorClass)
memberList
end;
这里,className是任何有效标志符,(ancestorClass)是可选的,memberList
它的字段、方法和属性。若你省略了(ancestorClass),则新定义的类直接继承自内置的类
果包含(ancestorClass)并且memberList是空的,你可以省略end。一个类声明也可以包括它实现的接口列表,请参考Implementing inteces。
在类声明中,方法看起来就像函数(或过程)头,而没有函数(或过程)体。方法的定义出现在程序的其它地方。
比如,这里是Classes单元中TMemoryStream类的声明
type
TMemoryStream = class(TCustomMemoryStream)
private
FCapacity: Longint;
procedure SetCapacity(NewCapacity: Longint);
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-68.html
击不击沉是决策者的事