Delphi关键字详解-南山古桃(转自橙子)-关键词:Del_第1页
Delphi关键字详解-南山古桃(转自橙子)-关键词:Del_第2页
Delphi关键字详解-南山古桃(转自橙子)-关键词:Del_第3页
Delphi关键字详解-南山古桃(转自橙子)-关键词:Del_第4页
Delphi关键字详解-南山古桃(转自橙子)-关键词:Del_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Delphi关键字详解-南山古桃(转自橙子-关键词:Delphi,关键字,absolute,abstract, and等2008年06月11日 星期三 下午 08:27关键词:Delphi,关键字,absolute,abstract,and等本文由 橙子 原创,版权归橙子所有absolute/它使得你能够创建一个新变量, 并且该变量的起始地址与另一个变量相同.varStr: string32;StrLen: Byte absolute Str;/这个声明指定了变量StrLen起始地址与Str相同./由于字符串的第0个位置保存了字符串的长度, 所以StrLen的值即字符串长度.beginStr

2、:= 'abc'Edit1.Text := IntToStr(StrLen;end;abstract/它允许你创建抽象的方法, 包括有抽象方法的类称为抽象类./Abstract关键字必须与Virtual或Dynamic关键字同时使用, 因为抽象方法必须被覆盖式实现./抽象类不能实例化, 抽象方法不能包含方法体.typeTDemo = classprivateprotectedprocedure X; virtual; abstract;publicconstructor Create;destructor Destroy; override;publishedend;and/一

3、、表示逻辑与if (a>0 and (b>0 then/二、表示位运算vara,b,c: Integer;beginc := (a and b;end;/使用And表示逻辑时, And左右的表达式必须用小括号括起, 以避免以生条件的冲突./例如:if a>0 and b>0 then/编译器可能会理解为:if a>(0 and b>0 then/或:if (a>0 and (b>0 then/但是实际编译时, 编译器会产生一个冲突, 报告错误./并且第一种可能包含了a>b>c的形式, 这在Delphi中不被支持./所以使用And运算符

4、时必须使用括号, 以区分左右的条件./表示位运算时也必须加上括号, 将And以及左右参数括起.array/Array用于表示数组, 任何的对象都能被声明成数组.数组分为静态和动态的2种./静态数组varArr1: array 1.10 of Integer;/动态数组, 由于声明时不知其元素个数, 所以必须在后期用SetLength方法设置数组的大小varArr2: array of Integer;/数组作为参数时, 不能传入数组的大小, 只能传入数组名, 然后用Length方法获取数组的元素个数function X(A: array of Integer: Integer;vari: In

5、teger;beginResult := 0;for i := 0 to Length(A-1 doResult := Result + Ai;end;as/As用于将一个对象转换为另一个对象procedure BtnClick(Sender:TObject;begin(Sender as TButton.Caption := 'Clicked'end;/对于对象填充接口的转换, 必须用As进行(HTTPRIO as IExp.GetConnection;/As不能用于数据类型的转换, 下面的代码是错误的:vari: Integer;s: string;begins := (i

6、 as string;end;/正确写法是:s := string(i;asm/Asm关键字用于插入汇编代码, 使用汇编代码时, 必须使用asm.end;的结构, 而非begin.end;function IntToHex(Value: Integer; Digits: Integer: string;asmCMP EDX, 32JBE A1xor EDX, EDXA1: PUSH ESIMOV ESI, ESPSUB ESP, 32PUSH ECXMOV ECX, 16CALL CvtIntMOV EDX, ESIPOP EAXCALL System.LStrFromPCharLenADD

7、ESP, 32POP ESIend;assembler/Assembler关键字用于支持早期的汇编, 如80386等./它和Asm的区别:Asm允许使用Win32汇编, 而Assembler只允许80x86汇编, 它不允许Invoke 语句的出现.function IntToHex(AValue: Int64: string; assembler;automated/Automated访问区分符用于描述一个自动类型的成员, 它能够使程序的版本向下兼容./ComObj单元内的成员及其实例不能使用Automated访问区分符.typeTDemo = classautomatedStr:WideSt

8、ring;end;/在程序的下一个版本中, 将Str做了修改, 变成typeTDemo = classautomatedStr: AnsiString;end/则新版本的Str变量能够接受旧版本的WideString型数据, 并自动转换成AnsiString./在实际开发中, 如果没有特殊的需要, 一般不用automated访问区分符.begin/begin关键字用于表示一段程序或一个结构的开始, 必须用end关键字来结束. procedure X;beginShowMessage('A Demo'end;/一般的结构, 如If, For, While等也需要用begin关键字

9、来标出结构起始点for i:=1 to 100 dobeginsum := sum + i;if sum > 1000 then Break;end;case/Case语句用于完成条件选择, Case语句的的被选择对象必须是有序类型, 包括整型, 枚举类型, 字符型等./Case语句必须由end结束,如果没有相符合的选择项, 可以加入else来作出通用选择. function GetDays(AYear,AMonth: Integer: Integer;begincase AMonth of1,3,5,7,8,10,12: Result := 31;4,6,9,11: Result :=

10、 30;2: beginif IsLeapYear(AYear thenResult:=29elseResult:=28;end;elseResult:=0;end;cdecl/Cdecl是函数调用协定的一种, 它规定了从C或C+编写的DLL中调用函数所必须遵守的规则./它可以将C或C+中的数据类型转换为Delphi的./例如C+中的代码:int X(int ireturn i*2;/这个函数被编译在Demo.dll中, 用Delphi调用时必须使用:function X(i: Integer: Integer; Cdecl; external 'Demo.dll'class/

11、Class关键字用于声明或继承一个类, 也可以使类和接口同时继承./另外, Class关键字也能用于声明类通用方法, 使得父类可以从类内访问子类的方法. typeClassDemo = class(TObjectprivatepublicconstructor Create;end;/如果用class声明方法, 则该方法在类与相关类中都可以使用, 譬如:typeClassA = classprivatepublicprocedure Y;end;typeClassB = class(ClassAprivatepublicclass procedure X;end;/则在使用时ClassA能够直

12、接访问ClassB的X方法procedure ClassA.Y;beginSelf.X;end;/此时父类将子类的class方法作为自身的方法进行调用.const/Const关键字用于声明常量, 使用const声明的数据将不能在程序中被改变./也可以用来声明函数参数, 用const指定的参数不允许在函数中改变.const MyFileName = 'Delphi'const MyInteger = 100;/用Const声明常量不需要指出其数据类型, 系统会自动判断类型, 并作自动调整./函数中可以用const声明不可更改的参数function X(const i: Integ

13、er: string;/此时在函数操作过程中, i的值不可改变.constructor/constructor关键字用来声明一个类的构造函数, 当类被实例化时, 首先调用此函数 /构造函数一般用Create表示, Create方法能够连带类中存在的CreateWnd方法.typeClassDemo = class(TObjectprivatefValue: Integer;publicconstructor Create;end;constructor ClassDemo.Create;beginfValue := 0;end;contains/Contains关键字指出了某个包(Packag

14、e是否包含某个文件./用Contains引入的文件必须被添加到包文件中, 它可以避免关键文件的引用丢失. package DATAX;requiresrtl, clx;containsDb, DBLocal, DBXpress;end.default/Default关键字用于指出一个属性的默认值/只有有序类型的属性才允许默认值的存在, 否则必须在构造函数中初始化属性值. typeClassDemo = classprivatefValue: Integer;publishedproperty Value: Integer read fValue write fValue default 0;e

15、nd;/它也可以指出一个类的默认属性property stringsIndex: Integer: string read GetString write PutString; Default;destructor/Destructor用于标识析构函数, 析构函数在类被释放时自动调用./析构函数只允许覆盖, 再不允许重载.析构函数通常用Destroy作为函数名.typeClassDemo = class(TComponentpublicdestructor Destroy;override;end;/由于TComponent类中也有Destroy方法, 所以要将其重写/但是若要重载析构函数,

16、则不允许, 下面代码是错误的:destructor Destroy; overload;dispid/DispId关键字被用在DispInterface接口中, 用于指定特定的适配序号./在DispInterface接口中, 适配序号必须是唯一的,/如果不指定DispId, 则系统会自动分配适配序号给接口内每一个方法./可以通过适配序号访问DispInterface接口中的方法.typeIStringsDisp = dispinterface'EE05DFE2-5549-11D0-9EA9-0020AF3D82DA'property ControlDefaultIndex: I

17、nteger: Olevariant dispid 0; default; function Count: Integer; dispid 1;property ItemIndex: Integer: Olevariant dispid 2;procedure Remove(Index: Integer; dispid 3;procedure Clear; dispid 4;function Add(Item: Olevariant: Integer; dispid 5;function _NewEnum: IUnknown; dispid -4;end;dispinterface/DispI

18、nterface用于声明一个特定的适配器接口, 这个适配器能够接受标准系统接口中传入传出的数据./用DispInterface声明的接口不能被继承, 只能够被引用./DispInterface中方法只能调用, 并且必须被动态绑定./可以通过DispId为接口内方汉分配适配序号./DispInterface仅能用于Windows平台, 如果在Linux下进行开发, 则此关键字会自动被系统屏蔽./通常情况下, 不使用DispInterface./实例请参见DispIddiv/Div用于求两数之整数商.用于Div运算的两个数值必须均为整型, 其运算结果也为整型. vara,b,c:Integer;b

19、egina := 20;b := 3;c := a div b; 6end;do/Do关键字用于For, While, On, With语句, 构成特定的结构/For语句:for i := 1 to 100 do sum:=sum+i;/While语句:while i < 100 dobeginsum := sum + i;Inc(i;end;/On语句(异常处理:tryi := StrToInt(s;excepton exception do ShowMessage('Error!'end;/With语句:with Memo1.Lines dobeginClear;Ap

20、pend('abc'Append('123'end;downto/DownTo关键字用于For语句, 指明循环变量是递减的.for i := 100 downto 1 do/在For语句中, 循环变量递增用To关键字, 递减用DownTo关键字.dynamic/Dynamic用于声明一个动态的方法,/动态方法可以被覆盖, 并且可以使代码大小尽可能的减少(区别于Vcedure X(i: Integer; dynamic;else/else用于引导程序的运行方向, 它可以与If, Case和On语句联用, 当条件不满足时, 转到else下运行/I

21、f语句(在If语句中, else前不允许有分号:if a > b thenc := aelsec:=b;/Case语句:case Tag Of1:Result:=1;2:Result:=2;3:Result:=3;elseResult:=0;end;/On语句(异常处理:tryi := StrToInt(s;Excpeton EZeroDivide do Result := 1;on EOverflow do Result := 2;elseResult := 0;end;end/End用于结束一个语句块或是一个单元./它可以与begin, Case, Class, Interface,

22、 Asm, Unit, Package等相匹配./对于语句块(局部结束, End后必须添加分号./而对于单元或包(全局结束, end后必须添加句号./在If语句中else关键字前的End后不允许添加符号.procedure X;beginwith Button1 dobeginif Button1.ShowHint thenButton1.Caption := 'Hinted'elseButton1.Caption := 'Not Hinted'end;end;/在包内使用End来结束:package DATAX;requiresrtl,clx;contains

23、 Db, DBLocal, DBXpress;end.except/except关键字用于异常处理, 必须用在try语句内, 如果发生异常, 则执行except后的语句tryi := StrToInt(s;exceptShowMessage('Error!'end;export/Export标明了函数调用协定, 指出函数可以被输出, 输出的函数能被本地或远程调用./其他程序可以用dll的形式调用程序内的函数.它是向下兼容的.function Add(a,b: Integer: Integer; export;/如果这个程序被编译为Demo.exe, 并且另一个程序需要调用这个函

24、数, 可以使用以下语句 function Add(a,b: Integer: Integer; stdcall; external 'Demo.exe'exports/exports用于输出对象, 它必须被用在接口和实现之间, 可以同时输出多个项, 项与项之间用逗号分开.library Demo;function X(i: Integer: string; stdcall;beginResult:=IntToStr(i;end;exportsX;beginend./如果输出的对象被重载, 则必须给对象起个别名, 并注明参数.library Demo;function X(i:

25、Integer: string; overload; stdcall;beginResult := IntToStr(i;end;function X(s: string: Integer; overload; stdcall;beginResult := StrToInt(s;end;exportsX(i: Integer name 'x1',X(s: string name 'x2'beginend.external/External关键字用于引用一个外部的或是OBJ内的方法.$L Demo.OBJprocedure X(i:Integer;external

26、;/如果是从dll或外部程序中引用, 则可以使用以下代码:function A(FileName: string: string; external 'Demo.dll'/如果被引用的函数被重载, 则必须另外指出引用的名称.function A(Name: string: string; overload; stdcall; external 'Demo.dll' name 'A1'function A(Code: Integer: string; overload; stdcall; external 'Demo.dll' na

27、me 'A2'/使用External关键字时, 必须注意大小写, 否则将出现错误.far/Far标明了函数调用协定, 指出函数可以被远程调用./其他程序可以用dll的形式调用程序内的函数.它是向下兼容的.function Add(a,b: Integer: Integer; Far;/如果这个程序被编译为Demo.exe, 并且另一个处于其他计算机的程序需要调用这个函数, 可以使用以下语句:function Add(a,b: Integer: Integer; stdcall; external 'Demo.exe'file/File关键字指出了文件操作类型,

28、文件必须被声明为File,/如果在File后追加Of和文件类型, 则文件可以被定义为读写指定类型数据.typeTPerson = recordPName: string32;PAge: Integer;end;varPFile: file of TPerson;finalization/finalization关键字标识了单元被释放时所要调用的方法,/通常是释放掉单元中不能自动释放的对象, 也可以不用./finalization最常用的情况是对OLE对象做反初始化.initializationActiveX.OleInitialize(nil;finalizationActiveX.OleUn

29、initialize;finally/finally关键字指出了异常处理中最后必须要调用的方法,/不论是否发生异常, finally后的语句总是在try语句结束时执行.tryNode := Node.GetNext;Edit1.Text := Node.Text;finallyNode := nil;end;for/For关键字引出For循环结构, 用于做指定次数的循环.for i := 1 to 100 do sum := sum + i;/如果循环变量是递减的, 则可以用DownTo关键字for i := 100 downto 1 do Inc(sum;forward/Forward关键字

30、用于方法的前置定义.只定义方法声明, 然后在程序的后面对方法进行实现./这么做有利于代码的可读性, 可以将所有的声明放在一起, 然后将所有的实现也放在一起.function X(i: Integer: Integer; forward;procedure Y(s: string; forward;.function X;beginResult := i * 2;end;procedure Y;beginWriteLn(s;end;/用Forward前置声明的方法在实现时不需要再输入方法的参数和返回值, 直接使用方法名即可.function/Function用于声明函数function X(i:

31、 Integer: Integer;/它也可以用于动态函数的声明typeTFun = function(i: Integer: Integer of object;/动态声明时, 不需要指出函数名, 只需要指出参数和返回类型就可以, 具体的函数名可以在后期绑定.goto/Goto语句用在跳转行号, 可以跳转到当前结构层内任意位置./必须在声明处用label关键字声明行号./由于Goto语句会破坏程序的结构, 不推荐使用.vara,b: Integer;labelX,Y;beginif a > b thengoto Xelsegoto Y;X:WriteLn('a > b&#

32、39;Y:WriteLn('b > a'end;if/If关键字引出If条件语句, 用于对条件进行判断.vara,b: Integer;begina := 2;b := 3;if a>b thenWriteLn('a=' + IntToStr(aelseWriteLn('b=' + IntToStr(b;end;/If语句的通常结构是If.Then.else, else语句也可以不要./在If语句内如果有多个子语句, 则必须用begin.End结构进行区分.if a > b thenbeginWriteLn('a>

33、b'WriteLn('a=' + IntToStr(a;WriteLn('b=' + IntToStr(b;EndelseWriteLn('b>a'implementation/Implementation标识了单元中的实现部分, 单元的基本结构为:/Unit.Interface.implementation.end./函数体, 过程体等必须写在implementation关键字后./如果在implementation后引用对象, 则对象是非公开的, 仅能供单元自身使用. implementationuses frmAbout;be

34、ginFormAbout.Show;end;/一个完整的单元必须拥有implementation部分.implements/Implements指出了一个属性从接口继承, 此时属性被转换成接口对象./通过接口动态绑定属性, 并动态的设定属性值.typeIMyInterface = interfaceprocedure P1;procedure P2;end;TMyImplclass = classprocedure P1;procedure P2;end;TMyclass = class(TInterfacedObject, IMyInterfaceFMyImplClass: TMyImplC

35、lass;property MyImplClass: TMyImplclass read FMyImplclass implements IMyInterface;procedure IMyInterface.P1 = MyP1;procedure MyP1;end;/通过implements声明后, 可以在类声明时指出接口中方法的实体, 如上例中的: procedure IMyInterface.P1 = MyP1;in/In用于判断一个集合中是否包含某个元素.被判断的内容必须是单个集合元素和一个集合的实例.typeTCol = (cA,cB,cC;TCols = set of TCol;v

36、arCols: TCols;beginCols := cA,cB;if cA in Cols thenShowMessage('cA in Cols'elseShowMessage('cA not in Cols'end;UsesUnit1 in 'Unit1.pas'/In可以被用在For语句中, 用于循环取出一个集合中的元素.vars: string;sl: TStringList;begin.for s In sl dobeginShowMessage(s;end;end;index/Index用于在属性中标识序号, 以便用相同的属性方法(

37、Get,Set对不同的属性进行操作. typeTForm1 = class(TFormprivatefunction GetInfo(const Index: Integer: Longint;procedure SetInfo(const Index: Integer; const Value: Longint;publicproperty iLeft:Longint index 0 read GetInfo write SetInfo;property iTop:Longint index 1 read GetInfo write SetInfo;property iWidth:Longi

38、nt index 2 read GetInfo write SetInfo;property iHeight:Longint index 3 read GetInfo write SetInfo;end;function TForm1.GetInfo(const Index: Integer: Longint;begincase Index of0: result := self.Left;1: Result := self.Top;2: result := self.Width;3: result := self.Height;end;end;/Index关键字也用于在属性中指出多个元素,

39、例如:property SelectedIndex: Integer: Boolean read GetSelected write SetSelected; inherited/Inherited用于调用父类的方法.typeTDemo = class(TComponentpublicconstructor Create(AOwner: TComponent; override;end;constructor TDemo.Create(AOwner: TComponent;begininherited Create(AOwner;end;/如果调用的是与自身同名的方法, 则也可以省去方法名和参

40、数.如上例中的inherited Create(AOwner;/可以改成:Inherited;initialization/initialization关键字标识了单元被载入时所要调用的方法,/通常是初始化一些不能自动初始化的对象, 也可以不用./initialization最常用的情况是对OLE对象做初始化.initializationActiveX.OleInitialize(nil;finalizationActiveX.OleUninitialize;inline/InLine关键字用于Asm或assembler结构中,/用于指出该汇编语句是向下兼容的.它对于程序的编译没有任何影响.

41、function IntToStr(Value: Integer: string;asmInLine;PUSH ESIMOV ESI, ESPSUB ESP, 16xor ECX, ECXPUSH EDXxor EDX, EDXCALL CvtIntMOV EDX, ESIPOP EAXCALL System.LStrFromPCharLenADD ESP, 16POP ESIend;interface/Interface标识了单元中的接口部分, 单元的基本结构为:/Unit.Interface.implementation.end./函数, 过程等的声明必须写在Interface关键字后./

42、如果在Interface后引用对象, 则对象是没有实例的, 使用时必须被实例化. Interfaceuses frmAbout;varFAbout: TFormAbout;beginFAbout := TFormAbout.Create(Self;FAbout.Show;end;/一个完整的单元必须拥有Interface部分./Interface也可以用作接口的声明.typeIMalloc = interface(IInterface'00000002-0000-0000-C000-000000000046'function Alloc(Size: Integer: Point

43、er; stdcall;function Realloc(P: Pointer; Size: Integer: Pointer; stdcall;procedure Free(P: Pointer; stdcall;function GetSize(P: Pointer: Integer; stdcall;function DidAlloc(P: Pointer: Integer; stdcall;procedure HeapMinimize; stdcall;end;is/Is关键字用于对象的判断, 有某些情况下, 也可以作"As"使用.Comp: TComponent;

44、begin.if Comp Is TEdit then(Comp as TEdit.Text := 'Edit'end;label/label关键字用于声明行号标签, 以便用Goto进行转向, 不推荐使用.vara,b: Integer;labelX,Y;beginif a > b thengoto Xelsegoto Y;X:WriteLn('a>b'Y:WriteLn('b>a'end;library/Library关键字用于指出一个工程为类库.类库编译后生成DLL文件, 可被其他程序调用. library Editors;

45、uses EdInit, EdInOut, EdFormat, EdPrint;exportsInitEditors,doneEditors name done,InsertText name Insert,DeleteSelection name Delete,FormatSelection,PrintSelection name Print,SetErrorHandler;beginInitLibrary;end.message/Message关键字用于声明消息方法,/带有Message的方法必须指出接收的消息类型, 并通过引用将消息传入方法中, 以便进行处理.procedure Refr

46、esh(var Msg: TMessageRecordtype; message ID_REFRESH;procedure Refresh(var Msg: TMessageRecordtype;beginif Chr(Msg.Code = #13 then.elseinherited;end;/用户可以自定义消息, 自定义消息也能够被Message接收, 并引发事件.mod/Mod用于求两数之整数模, 即余数.用于Mod运算的两个数值必须均为整型, 其运算结果也为整型.a,b,c: Integer;begina := 20;b := 3;c := a mod b; 2end;name/Nam

47、e关键字用于指出方法的别名,/对于一个要被外部引用的方法, 建议用Name申请方法别名, 以避免外部程序改动方法的实体内容./从外部引用一个方法时, 如果该方法有别名, 则必须用Name进行标识.function MessageBox(HWnd: Integer; Text, Caption: PChar; Flags: Integer: Integer;stdcall; external 'user32.dll' name 'MessageBoxA'near/Near标明了函数调用协定, 指出函数可以被本地调用./其他程序可以用dll的形式调用程序内的函数.它

48、是向下兼容的.function Add(a,b: Integer: Integer; near;/如果这个程序被编译为Demo.exe, 并且另一个处于本地的程序需要调用这个函数, 可以使用以下语句:function Add(a,b: Integer: Integer; stdcall; external 'Demo.exe'nil/Nil用于表示一个空指针, 或是没有实例的对象.while Node <> nil dobeginNode := Node.GetNext;end;nodefault/NoDefault关键字指出了一个属性不允许有默认值, 这通常用在继

49、承中.typeTClassA = classprivatefValue: Integer;publishedproperty Value: Integer read fValue write fValue default 0;end;TClassB = class(TClassApublishedproperty Value:Integer read fValue write fValue nodefault;end;/由上例可知, TClassA中的Value有默认值0,/TClassB继承了TClassA, 所以也继承了其默认值, 在此用NoDefault去掉默认值not/Not用于取反,

50、 它否定了原先的结果.例如:if a > b then/可以写成:if not(a < b then/Not关键字通常用于切换Boolean型的属性procedure Button1Click(Sender: TObject;beginend;object/Object用于声明一个对象, 这个对象可以是任意的, 并且向下兼容.Object只能被Object 所继承./声明对象的方法与声明类的方法是相同的.typeODemoA = objectend;ODemoB = object(ODemoAend;/Object关键字还用于声明动态函数或过程, 例如:typeTMyFun = f

51、unction(i: Integer: Integer of Object;TMyProc = procedure(s: string of object;/经过object声明的函数或过程可以被动态的绑定到指定的函数体, 或是绑定到控件是事件中.of/Of关键用于和其他关键字构成指定的结构.Of可以与Case, Class, Array, File, Set, Object连用./Case语句:case Tag Of0: Result := 'a'1: Result := 'b'end;/Class语句:typeTDemo = class of TCompon

52、ent;/Array结构:varMyInt: array of Integer;/File结构:varMyFile: file of Byte;/Set语句:typeTCol = (cA,cB,cC;TCols = set of TCol;/Object结构:typeMyFun = function(I: Integer: Integer of Object;on/On关键字用于异常处理, 指出发生的异常, 并获取异常信息.tryi := StrToInt(s;excepton E: exception doShowMessage(E.Message;end;or/一、表示逻辑或if (a&g

53、t;0 or (b>0 then/二、表示位运算vara,b,c: Integer;beginc := (a or b;end;/使用Or表示逻辑时, Or左右的表达式必须用小括号括起, 以避免以生条件的冲突/如果在条件语句中使用 Or, 则编辑器不知道用户使用Or做什么例如:if a>0 or b>0 then/编译器可能会理解为:if a>(0 or b>0 then/或者if (a>0 or (b>0 then/但是实际编译时, 编译器会产生一个冲突, 报告错误/并且第一种可能包含了a>b>c的形式, 这在Delphi中不被支持/所以

54、使用Or运算符时必须使用括号, 以区分左右的条件./表示位运算时也必须加上括号, 将Or以及左右参数括起.out/Out关键字说明了方法参数的输出方式, 一般的函数只能有一个返回值,/使用Out可以在一个函数中返回多个结果./Out和var不同, Out是以返回值的形式进行参数返回, 而var是直接输入一个参数的地址. procedure X(out i: Integer; out s: string;begini := i * 2;s := s + 'abc'end;procedure TForm1.Button1Click(Sender: TObject;vari: Integer;s: string;begini := 20;s := 'xxx'X(i,s;end;overload/Overload关键字指出了用于重载的方法, 重载即方法名相同,/但是参数数量, 类型或顺序不同, 满足此条件的构成重载.function X(i: Integer: string; overload;function X(s: string: string; overload;/从父类继承时, 如果子类拥有和父类相同的方法, 则也必须用overload构成重载,/但是此类重载也必须满足重载的要求.ty

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论