vb.netargumentstask-parallel-librarybyrefbyval

Argument passed ByVal to VB.NET Function and manipulated there


In this Microsoft sample an array Of Doubles is passed to the functions MultiplyMatricesSequential(...) and MultiplyMatricesParallel(...) as argument result using ByVal modifier: http://msdn.microsoft.com/de-de/library/dd460713(v=vs.110).aspx

Values in the arrays are being modified in these functions and the changes are available after the call to the functions returns. When I change ByValto ByRef in function MultiplyMatricesSequential(...) nothing changes, when I change to ByRefin the second function the IDE complains arguments being manipulated in Lambda expressions cannot be passed by reference.

I now wonder how the array values change in the caller when the use of ByVal is being forced?


Solution

  • When you pass an object ByVal to a function, you put a pointer to it on the stack. Then function can then modify the inner parts of the object, but not replace it with a new object.

    When you pass an object ByRef, you instead put a pointer to the objects pointer on the stack. The function can now replace the entire object with a new one.

    If you send an intrinsic value, like an Int32, to a function ByVal the value is put on the stack and can't be edited at all by the function.