广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 5953 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
flyspring
数位造型
个人文章 个人相簿 个人日记 个人地图
小有名气
级别: 小有名气 该用户目前不上站
推文 x0 鲜花 x29
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
[Basic] [求助] vb 自定函数的 call byval (传值呼叫) 到底有何用途 ?
除了保留原值以外,真的想不出 call byval 的作用,实 ..

访客只能看到部份内容,免费 加入会员 或由脸书 Google 可以看到全部内容



献花 x0 回到顶端 [楼 主] From:台湾中华电信 | Posted:2005-03-17 13:58 |
ziele 手机
个人文章 个人相簿 个人日记 个人地图
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x1 鲜花 x32
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

传值呼叫(ByVal)
用数值来传递引数时,传递的只是变数的副本。如果程序改变了这个数值,则所做变动只影响副本而不会影响变数本身。用 ByVal 关键字可指出引数是用数值来传递的。
例如:
Sub PostAccounts (ByVal intAcctNum as Integer)
     .
     . ' 陈述式放这里。
     .
End Sub
     ..
传址呼叫 (ByRef)
传址呼叫可以让程序直接存取变数在记忆体位址中的实际内容。因此,将变数传递给程序后,程序对变数值的改变将可以保留。引数的传递在 Visual Basic 中是预设为传址呼叫。
如果您对传址呼叫的引数指定资料型态,就必须传递这种型态的数值给引数。您也可以将运算式当成引数传递过去,而不是具有资料型态的引数。Visual Basic 会计算运算式,如果可能的话,还会按所要求的型态将结果传递给引数。
把变数转换成运算式的最简单的方法就是把它放在括号内。举例而言,若要把宣告为整数的变数传递给只接受字串为引数的程序,则可以用下面的叙述:
Sub CallingProcedure ()
     Dim intX As Integer
     intX = 12 * 3
     Foo (intX)
End Sub

Sub Foo (Bar As String)
     MsgBox Bar      ' Bar 的值为字串‘ 36 ’。
End Sub
----------------------------------------------------------------------------------------------------------------------------------------
外部参数传递比在处理内传递参数要来的慢,特别是参数用引用传递时。由于指标无法从一个位址空间直接传到另一个位址空间中,因此必须先传递一份副本给元件的位址空间。当方法执行完成后,还得将该资料复制传回。
选择 ByVal 还是 ByRef
因为一些外部参数传递的问题需要考量,因此在跨处理序元件中,某些方法的引数应该宣告为 ByVal,而在同处理序元件中则应该宣告为 ByRef,如下所述。
物件引用
在宣告由跨处理序元件提供的物件之方法时,请使用 ByVal 来宣告存放物件引用的引数。
这是由于如果跨处理序外部参数传递传送的物件引用是单向传递时,其所需的额外执行时间将会较少。用 ByRef 来定义一个引数代表着不仅物件引用必须跨处理序传递给元件,在方法结束之后还要将其传回给客户端。
只有在您需要用另一个物件的引用来替代客户端的物件引用的时候,才需要在宣告存放物件引用的引数时使用 ByRef。

此文章被评分,最近评分记录
财富:10 (by panasonic732)


献花 x0 回到顶端 [1 楼] From:台湾中华电信 | Posted:2005-03-17 17:14 |
jijifeng 手机
数位造型
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖
小有名气
级别: 小有名气 该用户目前不上站
推文 x0 鲜花 x139
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

感谢啰…当初我看书的时候也一直对这两个不太了解…
后来好不容易搞懂了说…
总而言之,ByVal就是把直传过去…本身的数值不会变化吧…
ByRef就是把数传过去运算完,会再回传回来…因此数值会变化…

请高手指教,不知道这样解释对不对呢…



献花 x0 回到顶端 [2 楼] From:台湾 | Posted:2005-03-18 08:22 |
flyspring
数位造型
个人文章 个人相簿 个人日记 个人地图
小有名气
级别: 小有名气 该用户目前不上站
推文 x0 鲜花 x29
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

不好意思,我是原发问者,当时想破头,急着要找答案,终于想到了。(感谢 ziele 大大的回答,不过我要的不是解释或定义,我是要实例说明的)。

我会问这个问题,是因为我觉得 byval 好像没什么用途,后来我想到它还是有用的,

byval 的用途实例: 输入学生成绩时,通常是以座号为排序,但如果要算总成绩排名时就可以用 byval 把阵列的值送到 sub 中改用名次排序并显示或列印出来,但回来主程式时,原值并未被改变,也就是资料仍然依座号排序的,这不就是 byval 的实例运用了吗 ? (同理可用在业绩排名上)


献花 x0 回到顶端 [3 楼] From:台湾中华电信 | Posted:2005-03-18 09:20 |
panasonic732 手机
个人头像
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x2 鲜花 x30
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

下面是引用flyspring于2005-03-18 09:20发表的 :
不好意思,我是原发问者,当时想破头,急着要找答案,终于想到了。(感谢 ziele 大大的回答,不过我要的不是解释或定义,我是要实例说明的)。

我会问这个问题,是因为我觉得 byval 好像没什么用途,后来我想到它还是有用的,

byval 的用途实例: 输入学生成绩时,通常是以座号为排序,但如果要算总成绩排名时就可以用 byval 把阵列的值送到 sub 中改用名次排序并显示或列印出来,但回来主程式时,原值并未被改变,也就是资料仍然依座号排序的,这不就是 byval 的实例运用了吗 ? (同理可用在业绩排名上)

那推荐您至小雄资讯网查查看

在教学区里面可以找到网站连结 ^^


忧虑不断,心未宁静
绵绵春雨,花失娇艳
凋零磨灭,事情难回
得意失意,不再回想
放弃它吧,唯有如此
献花 x0 回到顶端 [4 楼] From:台湾教育部 | Posted:2005-03-18 09:28 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.077281 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言