C# passes parameters by value unless you specify that you want it differently. If the parameter type is a struct, its value is copied, otherwise the reference to the object is copied. The same goes for return values.
You can modify this behavior using the ref
or out
modifier, which must be specified both in the method declaration and in the method call. Both change the behavior for that parameter to pass-by-reference. That means you can no longer pass in more complex expressions. The difference between ref
and out
is that when passing a variable to a ref
parameter, it must have been initialized already, while a variable passed to an out
parameter doesn’t have to be initialized. In the method, the out
parameter is treated as uninitialized variable and must be assigned a value before returning.