VB.NET參數傳遞_ByVal和ByRef
故事是這樣的
某一天小年輕工程師
接受到了 老闆交代的任務
當中這項任務中其中一小塊牽涉到
需要進行介面輸入的動作 功能設計
顯示 消費者購買東西時的價格計算
假設呢 他現在購買滿1000就打9折之類的
打8折的話就乘0.8
打75折的話就乘0.75
以此類推 打9折 就是 乘上 0.9
===============================================
假設買東西共花 1000元 就打九折
計算是這樣
1000*0.9 = 900元
===============================================
看似簡單 、 感覺不難
因此年輕小工程師 心想這有捨麼難的呀!!!
所以工程師一聽到就 看到黑影即開槍
立即著手撰寫
先是創建一個Module在當中(也可能是寫在現有架構某個公開的Module中)
定義好一個顯示當前輸入結餘顯示功能的 Subroutine
恩恩 看起來有順利進行顯示
因此他又將程式改寫
===============================================
Form1 Class
Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim balance As Decimal = TextBox1.Text ShowBalance("You owe", balance) Label2.Text = balance.ToString("C") End Sub End Class
Module (===> VB6留存下之 Global 概念)
Module Module1 Public Sub ShowBalance(message As String, amount As Decimal) amount *= 0.9 MessageBox.Show(message & " " & amount.ToString("C")) End Sub End Module
===============================================
原因就在於
預設 VB.NET 我們所定義的ShowBalance的 Subroutine 中
是以 Call By Value進行傳值的
是以 Call By Value進行傳值的
Call By Value 只是單純進行原數值的Copy且改變也只存在於該Subroutine該區塊當中
一離開就會回復原狀喔
一離開就會回復原狀喔
Public Sub ShowBalance(message As String, amount As Decimal) amount *= 0.9 MessageBox.Show(message & " " & amount.ToString("C")) End Sub
因此這裡必須修改此問題
要小心注意喔~~~~~
最後修正後Code
Module Module1 Public Sub ShowBalance(message As String, ByRef amount As Decimal) amount *= 0.9 MessageBox.Show(message & " " & amount.ToString("C")) End Sub End Module
示例影片:
留言
張貼留言