Hmm, I thought I had replied to this post, but it's not showing up. Here is the second attempt (good thing I had my answer saved). Say I did this:
private void button4_Click(object sender, System.EventArgs e)
{
CheckArray(ref originalArray);
}
private void CheckArray(ref int[,] iArray)
{
iArray = new int[10, 10];
iArray[0, 0] = 0;
}
This will actually change the originalArray variable. It now points to the new array I created in the CheckArray method. Without the ref modifier, it would only change the local iArray variable. A reference is a variable that points to some object in memory. The originalArray variable is a reference to an array held in memory somewhere. It allows me to perform operations on the array. However, operations on the originalArray variable itself only effect that variable. For example:
int[] arrayA = new int[10];
int[] arrayB = arrayA;
// Both arrayA and arrayB reference the same array.
// An operation on the array via the arrayA reference variable.
// Does not affect arrayB.
arrayA[0] = 42;
// An operation on the arrayA reference variable itself.
arrayA = null;
// This will print 42 because the arrayB reference variable
// still points to the array.
Console.WriteLine(arrayB[0]);
When a reference variable is passed by value to a method, a copy of the reference variable itself is made, much like what I did above with the arrayB variable. You'll notice that when I nulled out the arrayA, it did not affect the arrayB variable. It's the same when you pass a reference by value to a method. operations on the reference variable itself only affect the local variable. Now, the ref keyword gives me a reference to a reference, so to speak. If I modify a parameter with ref, and perform operations that change the variable itself, it also affects the reference variable that was originally passed to the method. This takes awhile to wrap your mind around it, but keep at it and it will eventually make sense. :)