martes, 8 de septiembre de 2009

C# parámetros por referencia (out y ref)

Para el CLR, out y ref son idénticos (generan los mismos metadatos y el mismo código IL), pero el compilador de C# los trata de manera distinta.

Esa distinción se basa en que, si usamos out en un parámetro de un método, no estamos obligados a inicializar el objeto antes de la llamada al método. En cambio si usamos ref, antes de la llamada al método debemos inicializar el valor del parámetro.

Otro punto a tener en cuenta es que no podemos sobrecargar un método en el que la sobrecarga difiera sólo en out y ref, ejemplo:
static void Suma(out Int32 n) { }
static void Suma(ref Int32 x) { }
Este caso provocaría un error de tipo 'Suma' cannot define overloaded methods that differ only on ref and out.

1 comentario:

Anónimo dijo...

Supongo que el libro te explicará el motivo.

No sé porque decidieron ignorar los modopt en c# y demás, pero se pueden dar problemas de ese tipo al usar componentes creados en c++/cli.

mercero.