廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 5749 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為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.015331 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言