將 'ByRef' 參數 '<parametername>' 的值複製回相對應的引數,會從型別 '<typename1>' 減少到型別 '<typename2>'
更新:2007 年 11 月
呼叫程序時會使用擴展至對應參數型別的引數,而進行從參數到引數的轉換時,則會進行縮小轉換。
當您定義類別或結構時,可以定義一或多個將該類別或結構型別轉換為其他型別的轉換運算子。也可以定義反向的轉換運算子,將其他型別轉換回您的類別或結構型別。當您在程序呼叫中使用類別或結構型別時,Visual Basic 會使用這些轉換運算子,將引數的型別轉換為對應參數的型別。
如果您傳遞引數 ByRef,Visual Basic 有時會將引數值複製到程序中的區域變數,而不是傳遞參考。在這種狀況下,當程序傳回時,Visual Basic 必須接著將區域變數值複製回呼叫程式碼中的引數。
如果 ByRef 引數值已複製到程序,並且引數和參數屬於相同型別,便不需要轉換。但是,如果型別不同,則 Visual Basic 必須以兩個方向轉換。如果其中一個型別是您的類別或結構型別,Visual Basic 即需在它與另一個型別之間來回轉換。如果其中一個轉換是擴展轉換,反向轉換便是縮小轉換。
錯誤 ID:BC32053
若要更正這個錯誤
請盡可能使用與程序參數相同型別的呼叫引數,這樣 Visual Basic 便不需要執行任何轉換。
如果您需要以不同於參數型別的引數型別呼叫程序,但不需要傳回值至此呼叫引數,則參數必須定義為 ByVal 而不是 ByRef。
如果您需要將值傳回呼叫的引數,請盡可能將反向的轉換運算子定義為 Widening。