खोज…


ByVal कीवर्ड

विधि पैरामीटर से पहले ByVal कीवर्ड (या डिफ़ॉल्ट रूप से कोई कीवर्ड ByVal नहीं माना जाता है) का कहना है कि पैरामीटर को पैरामीटर को अंतर्निहित करने वाले चर को बदलने की अनुमति नहीं देता है (नया मूल्य असाइन करें)।
यदि यह एक वर्ग है तो इसे तर्क की सामग्री (या स्थिति) को बदलने से नहीं रोका जा सकता है।

Class SomeClass
    Public Property Member As Integer
End Class

Module Program
    Sub Main()
        Dim someInstance As New SomeClass With {.Member = 42}

        Foo (someInstance)
        ' here someInstance is not Nothing (still the same object)
        ' but someInstance.Member is -42 (internal state can still be changed)

        Dim number As Integer = 42
        Foo(number)
        ' here number is still 42
    End Sub

    Sub Foo(ByVal arg As SomeClass)
        arg.Member = -arg.Member ' change argument content
        arg = Nothing ' change (re-assign) argument
    End Sub    

    Sub Foo(arg As Integer) ' No ByVal or ByRef keyword, ByVal is assumed
        arg = -arg
    End Sub
End Module

ByRef कीवर्ड

विधि पैरामीटर से पहले ByRef कीवर्ड कहता है कि पैरामीटर को इस तरीके से भेजा जाएगा जिससे पैरामीटर में अंतर्निहित चर (नया मान असाइन करें) बदल सके।

Class SomeClass
    Public Property Member As Integer
End Class

Module Program
    Sub Main()
        Dim someInstance As New SomeClass With {.Member = 42}
    
        Foo (someInstance)
        ' here someInstance is not Nothing
        ' but someInstance.Member is -42

        Bar(someInstance)
        ' here someInstance is Nothing
    End Sub

    Sub Foo(ByVal arg As SomeClass)
        arg.Member = -arg.Member ' change argument content
        arg = Nothing ' change (re-assign) argument
    End Sub

    Sub Bar(ByRef param As Integer)
        arg.Member = -arg.Member ' change argument content
        arg = Nothing ' change (re-assign) argument
    End Sub
End Module


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow