variables live on the stack, not the heap, so the notion of calling a function to create new variables - while an interesting idea and not impossible in other languages - implies that you don't understand the difference between a variable and an object in C#.
- a variable's storage is allocated on the stack, and the variable only exists for the duration of the execution of the function that declares the variable
this is distinct from a 'member variable' which is a field belonging to an object.
the 'out' keyword in C# means that a variable will be passed into the function 'by reference', and the function is expected to (required to) set the variable's value.
in general, 'out' parameters should be avoided; if you need to pass several values out of a function, they probably belong to a missing object!
EDIT: in C# an 'out' parameter is similar to a 'ref' parameter in that they are both call-by-reference parameters, as opposed to the more typical call-by-value parameter.