这里主要讨论Delphi中函数、方法的相关内容。
一、工程文件
{ Delphi语法方法和函数 1、方法 2、函数 } program Routine; {$APPTYPE CONSOLE} uses SysUtils, Unit1 in 'Unit1.pas'; { 方法 1、在工程文件中定义方法不需要在接口声明 } procedure foo(); begin WriteLn('这是在工程文件中定义的方法'); end; var nVar1:integer; nVar2:integer; varString:string; begin //调用工程文件中的方法 foo(); //调用单元文件unit1中的方法 //writeCurrentDir(); forwardKey_2(); { 传地址方法调用 1、swapInteger() 交换函数 2、调用IntToStr() 方法将整型转换为字符串类型 } nVar1 := 10; nVar2 := 20; varString := 'Before swap nVar1 =' + IntToStr(nVar1) +' ;nVar2 =' + IntToStr(nVar2); WriteLn(varString); //调用的时候,参数列表中的参数用 逗号分隔 swapInteger(nVar1,nVar2); varString := 'After swap nVar1 =' + IntToStr(nVar1) +' ;nVar2 =' + IntToStr(nVar2); WriteLn(varString); //演示传值参数的调用情况 varString := 'In the call function the value of nVar1 = ' + IntToStr(nVar1); WriteLn('Befor call valueProcedure'); WriteLn(varString); valueProcedure(nVar1); varString := 'In the call function the value of nVar1 = ' + IntToStr(nVar1); WriteLn('After call valueProcedure'); WriteLn(varString); //演示常量参数的调用情况 constProcedure(100); //演示输出参数的调用情况 WriteLn('Before call outProcedure(), nVar2 = ' + IntToStr(nVar2)); outProcedure(1000,nVar2); WriteLn('After call outProcedure(), nVar2 = ' + IntToStr(nVar2)); ReadLn; end.
二、单元文件 unit1
{ 方法和函数 1、方法 2、函数 } unit Unit1; interface uses Windows, //Win32 API SysUtils; //Delphi系统功能 { 方法 1、在单元文件中,必须如果要被其他文件引用,则方法必须在接口部分声明原型 2、定义方法的关键字是procedure } procedure writeCurrentDir(); (* 其他关键字 1、external用于引用其他编译单元的函数或方法,例如引用DLL、其他obj文件的函数 2、如果要引用其他obj文件的函数或方法,则需要使用引用其他obj文件,通过编译开关 {$L BLOCK.obj} 3、forward关键字可以用来声明方法或者函数, 和C语言一样方法或者函数必须先定义 后才能使用,而有时候可能需要推迟一下定义函数或方法,这时就可以利用forward 关键字先声明函数或方法,有点像C语言中先声明函数的原型。 *) { 下面的函数演示forward的用法 } procedure forwardKey_2(); { 方法或者函数的参数传递方式 1、按地址传递, 在定义参数的时候使用关键字 var 2、按值传递,不用其他关键字,默认的传递方式 3、按常量方式传递, 利用关键字 const 定义形式参数 4、按输出方式传递, 利用关键字 out 来定义形参 5、参数列表的分隔符是分号 ; 注意这个与C语言的区别 } { 演示按地址传递方式的方法 1、利用关键字 var 定义形式参数 2、交换两个变量的值, 经典函数swap 3、要注意与传递指针的区别 } procedure swapInteger(var nVar1:integer;var nVar2:integer); //procedure swapIntegerByPointer(); { 传值方式 1、传值方式为默认的传递方式 } procedure valueProcedure(nVar:integer); { 常量方式传递参数 1、这个函数演示按常量方式传递参数 } procedure constProcedure(const nVar:integer); { 输出参数 1、在Delphi中默认的是方法不能返回值到调用函数,函数可以返回值到调用函数 2、函数通过函数名返回值,或者通过缺省的result变量返回值。 3、还有一种方式可以返回值,就是定义输出参数 4、输出参数用 out 关键字定义 5、注意输出参数和传地址、指针变量的区别 } procedure outProcedure(nVar1:integer;out nVar2:integer); implementation procedure writeCurrentDir(); //在过程中定义,过程作用域的局部变量 var strPath:WideString; currentPath:ansistring; nPathLen:integer; begin //要使用字符串必须先初始化,如果没有初始化的话就必须先申请内存 SetLength(strPath,255); WriteLn(strPath); //申请内存后,输出全为 ????, 因此利用函数进行清零 FillMemory(@strPath,255,0); //获取当前工作路径, 调用Win32 API GetCurrentDirectory(255,PWideChar(strPath)); currentPath:=strPath; WriteLn(currentPath); { 命令行参数 1、Delphi程序也能获取命令行参数 2、通过 SysUtils 单元中的 ParamStr() 函数获取命令行参数 3、命令行参数编号从 0 开始, ParamStr()获取传递给应用程序的第一个参数 } //通过调用Delphi提供的函数获取当前路径,带目录分隔符 currentPath := ExtractFilePath(ParamStr(0)); WriteLn(currentPath); //不带目录分隔符 currentPath := ExTractFileDir(ParamStr(0)); WriteLn(currentPath); end; { forward关键字的使用 1、如下所示,如果不用关键字 forward 就会编译出错 2、这里表示 forwardKey_1() 先声明原型然后再定义 3、如果将下面一行声明全注释,则在 forwardKey_2()中会提示 forwardKey_1() 没有定义 } procedure forwardKey_1();forward; procedure forwardKey_2(); begin WriteLn('Call forwardKey_1() by used forward keyword.'); forwardKey_1(); end; procedure forwardKey_1(); begin WriteLn('This is forwardKey_1().'); end; { 传地址方式例子 1、swap 函数 } procedure swapInteger(var nVar1:integer;var nVar2:integer); var nVar:integer; begin nVar := nVar1; nVar1 := nVar2; nVar2 := nVar1; end; { 传值方式的例子 1、直接输出参数 } procedure valueProcedure(nVar:integer); var str:string; begin str:='Before change in function valueProcedure nVar= ' + IntToStr(nVar); WriteLn(str); nVar := 100; str := 'After change in function valueProcedure nVar= ' +IntToStr(nVar); WriteLn(str); end; { 常量方式的参数 1、用于保护不让在函数里面改变传递给实际参数的值 2、这里有一点与C语言里面类似,就是指针的指向和指针指向变量的值的关系,需要注意 } procedure constProcedure(const nVar:integer); var nVar1:integer; begin //因为形式参数 nVar 定义为 const,所以下面的语句编译不能成功 //nVar:=300; //可以访问变量。 nVar1:= nVar; WriteLn('nVar1 = ' + IntToStr(nVar1)); end; { 输出参数 1、输出参数的定义用关键字 out 实现 2、如果接触过西门子PLC的话,就会很容易理解输出参数的用法 } procedure outProcedure(nVar1:integer;out nVar2:integer); begin nVar2 := nVar1; end; end.
欢迎转载,转载请注明来源。