No estás solo; esto confunde a mucha gente.
Así es como me gusta pensar en ello.
Una variable es una ubicación de almacenamiento.
Una variable puede almacenar algo de un tipo particular.
Existen dos tipos de tipos: tipos de valores y tipos de referencia.
El valor de una variable de tipo de referencia es una referencia a un objeto de ese tipo.
El valor de una variable de tipo de valor es un objeto de ese tipo.
Un parámetro formal es un tipo de variable.
Existen tres tipos de parámetros formales: parámetros de valor, parámetros de ref y parámetros de salida.
Cuando utiliza una variable como argumento correspondiente a un parámetro de valor, el valor de la variable se copia en el almacenamiento asociado con el parámetro formal. Si la variable es de tipo de valor, se realiza una copia del valor. Si la variable es de tipo de referencia, se hace una copia de la referencia, y las dos variables ahora se refieren al mismo objeto. De cualquier manera, se realiza una copia del valor de la variable.
Cuando utiliza una variable como argumento correspondiente a un parámetro out o ref , el parámetro se convierte en un alias para la variable. Cuando uno dice:
void M(ref int x) { ...}
...
int y = 123;
M(ref y);
lo que está diciendo es "X e Y son ahora la misma variable". Ambos se refieren a la misma ubicación de almacenamiento.
Me parece mucho más fácil de comprender que pensar en cómo se implementa realmente el alias, pasando la dirección administrada de la variable al parámetro formal.
¿Está claro?
¡Gracias por las respuestas rápidas, amigos! Fue como esperaba Acabo de tener un momento de incertidumbre allí. – stiank81
Si quisiera hacer algo inteligente, podría hacer una lista de su propia clase, que implícitamente se envía a IList haciendo una copia. El único beneficio que puedo ver de esto es que teóricamente impide que "olvides" hacer una copia cuando pasas por una colección. – kyoryu
No, no quiero hacer eso ... El constructor List que toma IEnumerable parece ser tan inteligente como puede ser. Todo lo que necesito .. – stiank81