Here is a simple example of parameter passing in C#..
Since CalledMethod function changed the sb value, it will easily give you an impression that Parameter is passed by reference. Actually, it's not.
Sb2 is a new string builder object, and it points to the same string builder object in memory. So, when CalledMethod change the value, the value which the original string object (sb1) refers also change. This doesn't mean "pass by reference", it is still "pass by value". Here is another example to show this.
Here , if sb2 changes to null, it doesn't affect the value of sb1.
The difference between those two examples are "change the value the parameter points to" or "change the value of the parameter itself".