Share via


ByVal v.s. ByRef

這兩天粽子節都在陪著客戶上新核心銀行系統,粽子一顆都沒吃到,倒是吃了客戶不少便當 :p  這次有一個很緊急的狀況,雖然只是一個小小的bug,但卻差點讓整個系統上不了線...

相信大多的 Visual Basic 或 Visual Basic .NET 的 developer 都知道 method 的 parameter 有分為 ByVal 與 ByRef,但是你知道若是你在 method signature 中沒有指明的話是哪一個嗎? 例如 :

    Public Function MyTestFunction1 ( p1 As String) As Int

    .......

    End Function

 如果是 VB6 , p1 會是 ByRef , 如果是 VB.NET,p1會是 ByVal !

這次的事件發生在 ASP 程式呼叫 VB6 開發的 COM 元件,由於 developer 沒有特別指名 ByRef 或是 ByVal ,因此VB6 compile 時會把它當成 ByRef,偏偏 MyTestFunction1 程式運作的過程內又重新 assign p1 的值,因此 ASP 程式中傳入 p1 的原變數值也跟著變更,出現後續的邏輯錯誤...

好的寫碼習慣不應該依賴系統的預設行為,若是能在程式中明確指明,這代表真的懂得其中差別,也才能完整掌握系統運作行為。