"out object result" is a way of saying that the function will generate a new object that the caller can play with if the method is called. It's basically an additional return type that the method has, so it can return more than one thing at a time.

"ref object result" means you're going to give the method a variable, but allow the method to not only change the variable by calling its methods and settings its fields, but also allow the method to set the variable from which object came. This is like a sub-function setting a local variable in a parent method.

 

Consider the following code:

object myObj = new object(); // line 1
foo(ref myObj); // line 2
// line 3

line1 initializes myObj. Line2 potentially modifies or changes myObj (it behaves like myObj = someFunc(myObj), it could either change myObj and return myObj, it could return null or it could return an entirely new object).

 

Consider now the following code:

object myObj = new object(); // line 1
foo(out myObj); // line 2
// line 3

line1 initializes myObj as before. Line2 now throws away the previous value of myObj. During line2 myObj is set to a completely new value. This is behaving like myObj = someFunc().