cref - summary example c#
Cómo ''hacer'' ByVal en C# (3)
Como lo entiendo, C # pasa parámetros a métodos por referencia. En VB.NET, puede especificar esto con ByVal y ByRef. El valor predeterminado es ByVal.
¿Esto es por compatibilidad con Visual Basic 6.0, o es solo aleatorio? Además, ¿cómo puedo especificar qué usar en C #? Me gusta la idea de pasar parámetros por valor.
Los parámetros en C # se pasan "ByVal" de forma predeterminada. Debe especificar "ref" o "out" si desea un comportamiento diferente.
Los parámetros en C # son, por defecto, pasados por valor. No hay un modificador para hacer esto explícito, pero si agrega ref
/ out
el parámetro es por referencia.
La confusión habitual aquí es la diferencia entre:
- pasar un tipo de valor por valor (los cambios en el tipo de valor no son visibles para la persona que llama, pero los tipos de valor deberían ser inmutables de todos modos)
- pasar un tipo de valor por referencia (los cambios en el tipo de valor son visibles para la persona que llama, pero los tipos de valor deberían ser inmutables de todos modos, tan importante que lo diré dos veces; p)
- pasar una referencia por valor (los cambios en los campos / propiedades del tipo de referencia son visibles para la persona que llama, pero la reasignación del tipo de referencia a un objeto nuevo / diferente no es visible)
- pasar una referencia por referencia (los cambios en los campos / propiedades y la reasignación de la referencia son visibles para la persona que llama)
Pasar por valor es el valor predeterminado en C #. Sin embargo, si la variable que se pasa es de tipo de referencia, entonces está pasando la referencia por valor. Este es quizás el origen de tu confusión.
Básicamente, si pasa una referencia por valor, entonces puede cambiar el objeto al que hace referencia y estos cambios persistirán fuera del método, pero no puede hacer que la variable se refiera a un objeto diferente y hacer que ese cambio persista fuera del método.