Here's a summary of the different parameter modifiers and how the behavior changes for each, when using them with value-typed and reference-typed variables.
- No modifier - value types
- Copy of value passed to method
- Method can read value
- No modifier - reference types
- Reference to object passed to method
- Method can read/write object contents
-
ref modifier - value types
- Reference to variable passed to method
- Method can read/write variable
-
ref modifier - reference types
- Reference to object reference passed to method
- Method can read/write object contents
- Method can change reference to point to new object
-
out modifier - value types
- Reference to variable passed to method
- Method must write new value to variable
-
out modifier - reference types
- Reference to object reference passed to method
- Method must change reference to point to new object