They have different syntax and different requirements from the code implementing the method, from the binary layout on stack they are the same.
Out is the same as ref, with additional requirement: to assign some value to it before return, enforced by compile-time error. The purpose of out is to read value (optionally) and assign new value (mandatory). For ref, you can do read-only or write-only, or nothing (which makes no sense).
Also, a call should math; a keyword ref or out should be used. At the call, a
ref
parameter should be initialized;
out
does not require initialization.
[EDIT] See also my other solution, a bit more detailed:
The out and ref Parameter in C#[
^]. Please also see the discussion and other answers.
—SA