Generally, I understand the difference between passing parameters by value and by reference.

I also somewhat understand the difference between ref and out keywords. A ref variable is passed by reference, so in the example below, the value of i will be changed.

int i = 0;
MyMethod(ref i);     // i will be 10

void MyMethod(ref int value)
    value += 10;

When using out the value does not need to be initialized. The method is expected to that for you as in the next example:

int i; 
MyMethod(out i);     // i will be 5

void MyMethod(out int value)
    value = 5;

Here is the real question:

Strings are passed by reference by default. Why would anyone use the ref keyword when passing strings or any object for that matter?