在Delphi过程、函数中传递参数几个修饰符为Const、Var、Out。另一种不加修饰符的为默认按值传递参数。

一、默认方式以值方式传递参数

procedure TForm1.ProcNormal(Value: string);
begin
OrigNum:=Value+ Me;
lblReturn.Caption:=OrigNum;//OrigNum为Hello Me
lblOrig.Caption:=Value;//Value为Hello
end;

调用:

OrigNum:=Hello;
ProcNormal(OrigNum);

二、以Const方式传递参数,这个参数在调用过程中不能改变,并且这种方式会被编译器优化,一般建议尽可能地使用这种方式。

procedure TForm1.ProcConst(const Value: string);
begin
OrigNum:=Value+ Me;
lblReturn.Caption:=OrigNum;//为Hello Me‘
lblOrig.Caption:=Value;//为Hello Me
end;

三、按引用方式传递参数

procedure TForm1.ProcRef(var value: string);
begin
OrigNum:=Value+ Me;
lblReturn.Caption:=OrigNum;//为Hello Me‘
lblOrig.Caption:=Value;//为Hello Me
end;

四、按Out方式传递参数,这个方式传递参数时,参数可以不被初始化,即使有值也被忽视,它一般用于输出,它可以实现在一个过程中返回多个值,我们通常在分布式对象模型,如COM中使用它。

procedure TForm1.ProcOut(out Value: string);
begin
OrigNum:=Value+ Me;
lblReturn.Caption:=OrigNum;//为Me
lblOrig.Caption:=Value;//为Me
end;

五、无类型参数,这是一种较为特殊的方法,参数的类型不确定,只能用Const、Var、Out修饰,不能用于值方式传递参数,具体使用示例如下:

procedure TForm1.ProcUntype(const Value);
begin
OrigNum:=string(Value)+ Me;
lblReturn.Caption:=OrigNum;//为Hello Me
lblOrig.Caption:=string(Value);//为Hello Me
end;  
六、默认参数,即如果此参数在调用时未提供时,将使用默认值。

procedure TForm1.ProcDefault(const Value, const DefaultValue:string= 123);
begin
OrigNum:=Value+ Me+DefaultValue;
lblReturn.Caption:=OrigNum;//为Hello Me 123
lblOrig.Caption:=Value;// 为Hello Me 123
end;

七、开放数组参数,即参数数组的元素个数不确定。

procedure TForm1.ProcArray(const Value: array of string);
var
i:Integer;
begin
for i:=Low(Value) to High(Value) do
OrigNum:=OrigNum+Value[i];//调用后为Hello abc dbd
lblReturn.Caption:=OrigNum;
end;

调用:

OrigNum:=Hello;
ProcArray([ abc , dbd]);

八、无类型开放数组参数,即类型及元素个数皆不确定。在WIN32平台中,这个参数的类型实际为array of TVarRec,其使用示例如下:

procedure TForm1.ProcArrayConst(const Value: array of const);
var
i:Integer;
begin
for i:=Low(Value) to High(Value) do
with Value[i] do
case VType of
vtAnsiString: OrigNum:= OrigNum+String(VAnsiString);
vtInteger: OrigNum:=OrigNum+IntToStr(VInteger);
vtBoolean: OrigNum := OrigNum + BoolToStr(VBoolean);
vtChar: OrigNum := OrigNum + VChar;
vtExtended: OrigNum := OrigNum + FloatToStr(VExtended^);
vtString: OrigNum := OrigNum + VString^;
vtPChar: OrigNum := OrigNum + VPChar;
vtObject: OrigNum := OrigNum + VObject.ClassName;
vtClass: OrigNum := OrigNum + VClass.ClassName;
vtCurrency: OrigNum := OrigNum + CurrToStr(VCurrency^);
vtVariant: OrigNum := OrigNum + string(VVariant^);
vtInt64: OrigNum := OrigNum + IntToStr(VInt64^);
end;
lblReturn.Caption:=OrigNum;//调用后为Hello abc 3
end;

调用:

OrigNum:=Hello;
ProcArrayConst([ abc ,3]);

以上就是常见几种传递参数的方式。

转载于:https://www.cnblogs.com/moon25/archive/2012/02/04/2337769.html

[转]Delphi过程函数传递参数的几种方式相关推荐

  1. 向函数传递结构的三种方式

    向函数传递结构的三种方式 零.写在前面 在程序设计的过程当中,我们经常会涉及到选择数据的类型,在很多情况下,单单是普通的变量和数组并不足以满足我们的需求,这时候,C语言为我们提供了一种计较好用的数据类 ...

  2. 表单提交和超链接请求传递参数的几种方式

    表单提交和超链接请求传递参数的几种方式 这段时间在使用easy-ui的datagrid,他有自己提交表单的方式,所以就整理整理页面对参数的提交方式: 注:下面代码都已经过测试. 1. HTML提交表单 ...

  3. vue-router 传递参数的几种方式

    本文转载自:https://blog.csdn.net/crazywoniu/article/details/80942642 vue-router传递参数分为两大类 编程式的导航 router.pu ...

  4. JSP中页面向Action传递参数的几种方式

    转自:http://zhidao.baidu.com/link?url=kEOyifTghb--LvcQVpkh-kkpgZIcYU-dlqQyNM5e3b_9fywiDQGVxAOHVedJkqGA ...

  5. Flink获取外部传递参数的两种方式

    目录 一.前言 二.实现 2.1 通过参数方式直接传递 2.2 通过配置文件来获取参数值 一.前言 在Flink中,我们会对接Kafka,Kafka的参数比较多,如果我们希望通过灵活的方式修改参数,而 ...

  6. mybatis 传递参数的三种方式

    mybatis 框架的主要工作是数据层, 侧重于与数据库打交道的sql语句的编写,对sql也要求比较熟练. mybatis 传递参数的方式主要有三种: 1. 多个参数的传递方式    形式如:    ...

  7. Python传递参数的5种方式

    一.位置传参 # 位置传递实例: def fun1(a,b,c):return a+b+cprint(fun1(1,2,3)) 输出: 6 二.关键字传参 根据每个参数的名字写入函数参数 # 关键字传 ...

  8. react --- 隔代传递参数的三种方式

    组件跨层级通信 - Context 上下文提供一种不需要每层设置props就能跨多级组件传递数据的方式 方式1 Provider提供值 Consumer来消费传递的值 import React fro ...

  9. Mybatis传递参数的三种方式

    第一种: Dao层使用@Param注解的方法 VersionBox getVersionByVersionNumAndVersionType(@Param("versionNum" ...

最新文章

  1. 蚂蚁金服 Service Mesh 实践探索
  2. HDU2029:Palindromes _easy version
  3. 微信红包要哭了...给抢红包设计一个新交互
  4. 微信公众号 JSSDK 提示:invalid signature
  5. 手把手带你入门Python爬虫(二、爬虫预备知识)
  6. 崇高文本_崇高文本片段指南
  7. 【华为云技术分享】大数据容器化,头部玩家尝到了甜头
  8. 为什么要学数据结构?| 原力计划
  9. JQuery+div+css实现无限级联树
  10. 关键词组合工具_关键词的优化方法及搜索工具,亚马逊关键词处理
  11. java json-rpc_JSON-RPC(jsonrpc4j)使用demo
  12. 微信修改步数 Android,安卓微信怎么改步数
  13. 2021年中国发改委和财政部PPP项目整体现状分析,城市基础建设仍是重中之重「图」
  14. 卡内基梅隆大学计算机专业介绍,美国卡内基梅隆大学计算机专业介绍
  15. 用Auto.js批量删除空间说说
  16. 微型计算机中的数据总线用来进行什么的传输,汽检2011级汽车车载网络复习题答案...
  17. 【流体机械原理及设计03】
  18. 【科创人独家】EasyStack王瑞琳:All In超级领先,知易行难
  19. winform 使用SplashScreen窗口
  20. 计算机主机内部主要由哪些硬件构成,计算机硬件由哪几部分组成?各部分的作用是什么?...

热门文章

  1. silverlight-Canvas中1像素的线变成了2像素
  2. java 蓝桥杯算法训练 特殊的数字四十
  3. centos usb转网口_centOS安装与配置minicom(串口转USB)
  4. L2C中Lustre语义的环境定义
  5. GroupCoordinator分析
  6. ControllerShutdownRequest分析
  7. JDK1.8 HashSet
  8. git 创建webpack项目_使用webpack手动创建一个完整项目的全过程
  9. 数字图像处理(四)——图像编码技术(一)
  10. 高,低电平复位电路原理及加电容的作用