Object parameter passed by Value and by Reference
Imports System public class MainClass Shared Sub Main() Dim A As New MyObject() Dim B As MyObject = A A.X = 1 Console.WriteLine("Initial state") Console.WriteLine("Are A and B the same? " + (A Is B).ToString()) Console.WriteLine("A.x: " + A.X.ToString() + " B.x " + B.X.ToString()) FunctionPassObjectByReference1(B) Console.WriteLine("After FobjByRef1") Console.WriteLine("Are A and B the same? " + (A Is B).ToString()) Console.WriteLine("A.x: " + A.X.ToString() + " B.x " + B.X.ToString()) A.X = 1 B = A FunctionPassObjectByReference2(B) Console.WriteLine("After FobjByRef2") Console.WriteLine("Are A and B the same? " + (A Is B).ToString()) Console.WriteLine("A.x: " + A.X.ToString() + " B.x " + B.X.ToString()) A.X = 1 B = A FunctionPassObjectByValue1(B) Console.WriteLine("After FobjByVal1") Console.WriteLine("Are A and B the same? " + (A Is B).ToString()) Console.WriteLine("A.x: " + A.X.ToString() + " B.x " + B.X.ToString()) A.X = 1 B = A FunctionPassObjectByValue2(B) Console.WriteLine("After FobjByVal2") Console.WriteLine("Are A and B the same? " + (A Is B).ToString()) Console.WriteLine("A.x: " + A.X.ToString() + " B.x " + B.X.ToString()) End Sub Shared Public Sub FunctionPassObjectByReference1(ByRef Y As MyObject) Y.X = 5 End Sub Shared Public Sub FunctionPassObjectByReference2(ByRef Y As MyObject) Y = New MyObject() Y.X = 5 End Sub Shared Public Sub FunctionPassObjectByValue1(ByVal Y As MyObject) Y.X = 5 End Sub Shared Public Sub FunctionPassObjectByValue2(ByVal Y As MyObject) Y = New MyObject() Y.X = 5 End Sub Class MyObject Public X As Integer End Class End Class