在TXXMessage的定义中,经常看到
case Integer of
0:begin
end;
1:begin
end;
end;请问这个Integer是怎么定义的?有哪些学问,
请大虾指点
case Integer of
0:begin
end;
1:begin
end;
end;请问这个Integer是怎么定义的?有哪些学问,
请大虾指点
解决方案 »
- 有做工控的高手吗?请推荐几本书!百分求人!
- 如果在点关闭后执行完一段音乐后关闭
- 如何中止一个存储过程(TADOQuery)的执行
- 怎么让TMemo中的光标到最后
- 寻求能将通过可视化生成的单元(包括界面)转换成封装好的类的工具
- 在局域网内为什么老有几台机器连不上sql server,sql server装在于控制器上,急!
- 碰到一件很奇怪的事情,大家给点建议
- 我将datacontrol组中的控件都hide掉了,怎么再恢复过来?
- 能不能给点代码,像记事本的"另存为“一项,如果相同的名字,弹出是否替换的对话框,
- MaskEdit问题,请高手指教!!!
- 一个关于ComboBox控件的问题,如何在程序里设置ItemIndex的值
- QuickRep报表打印问题?在线等待!高手的清清一点!
编译器预定义的:
{Predefined constants, types, procedures, }
{ and functions (such as True, Integer, or }
{ Writeln) do not have actual declarations.}
{ Instead they are built into the compiler }
{ and are treated as if they were declared }
{ at the beginning of the System unit. }
记录类型中可以含有变体部分,有点象case语句。变体部分必需在记录中其他字段的声明之后。声明含有变体部分的记录类型,语法如下:type recordTypeName = record fieldList1: type1; ... fieldListn: typen;case tag: ordinalType of constantList1: (variant1); ... constantListn: (variantn);end;在保留字case之前的声明部分与标准记录类型中的声明相同。剩余从case到end之前最后一个可选的分号(;)之间叫做变体部分。在变体部分中:· tag是可选的,并且可以是任意有效的标识符。如果忽略tag,那么也要同时忽略紧随其后的冒号(:)。· ordinalType表示一个序数类型。· 每个constantList都是一个表示ordinalType类型的常量,或者逗号隔开的此类常量列表。在当前变体部分声明中,对于所有的constantLists,同一个值最多只能出现一次。· 每个variant都是一个逗号隔开的声明列表,这与记录类型主要部分中的fieldList: type结构相似。也就是说,variant具有如下形式fieldList1: type1; ...fieldListn: typen;这里,每个fieldList是一个有效标识符或者逗号隔开的标识符列表,每个type代表一个类型,最后的分号是可选的。所有的类型(types)都不能是长串、动态数组、变体(即Variant类型)或接口,也不能是包含长串、动态数组、变体(即Variant类型)或接口的结构类型;但可以是指向这些类型的指针。含有变体部分的记录在语句构成上比较复杂,但在语义上比较简单,具有欺骗性。记录中的变体部分包含几个变体,在内存中它们共享相同的空间。可以在任何时候对记录中任何变体的任何字段读或写;但如果在一个变体中写一个字段并且在另一个变体中写另一个字段,那么后面的写操作可能覆盖前面写入的数据。对于Tag,如果存在,那么将作为记录中的非变体部分,被视为额外的字段(其类型是ordinalType)。 变体部分有两种用途。首先,假设要创建一个记录类型,它有不同数据种类的字段,但不需要在单个记录实例中使用全部数据。例如,type TEmployee = record FirstName, LastName: string[40]; BirthDate: TDate; case Salaried: Boolean of True: (AnnualSalary: Currency); False: (HourlyWage: Currency);end;这里的意思是,每个雇员都有年薪或计时工资,但不能都有。因此,在创建TEmployee时,没有理由为两个字段都分配足够的内存。这种情况下,变体之间只有名字不同,而要想让字段的类型不同也是很容易的。考虑相对复杂的例子:type TPerson = record FirstName, LastName: string[40]; BirthDate: TDate; case Citizen: Boolean of True: (Birthplace: string[40]); False: (Country: string[20]; EntryPort: string[20]; EntryDate, ExitDate: TDate); end;type TShapeList = (Rectangle, Triangle, Circle, Ellipse, Other); TFigure = record case TShapeList of Rectangle: (Height, Width: Real); Triangle: (Side1, Side2, Angle: Real); Circle: (Radius: Real); Ellipse, Other: (); end;对上面的每个记录实例,编译器分配足够的内存以在最大的变体中能够保存所有的字段。可选的Tag和常量列表constantLists(如上面最后一个例子中Rectangle、Triangle等)在编译器管理字段的途径中不扮演任何角色,它们仅为程序员提供方便。 变体部分的第二个用途是,可以将相同的数据视为不同的类型,尤其在编译器不允许类型转换的情况。例如,如果有一个64位的实数Real类型作为变体的第一个字段,一个32位的整数Integer类型作为另一个变体的第一个字段,那么可以向实数Real字段赋值然后以整数Integer字段读出其前32位(简单地说,作用就是请求整数参量)。
sorry,本来是要给你45分的,结果那段文字太长,把它加到下面一个朋友的上面去了,实在不好意思,明天我给你放分,100,先谢过了!