Pregunta

Como lo entiendo, C # pasa parámetros en los métodos de referencia. En VB.NET, puede especificar esto con ByVal y ByRef. El valor predeterminado es ByVal.

Es esto para la compatibilidad con Visual Basic 6.0, o es sólo azar? Además, ¿cómo puedo especificar qué usar en C #? Me gusta la idea de pasar parámetros por valor.

¿Fue útil?

Solución

Los parámetros en C # son, por por defecto pasa por valor. No hay ningún modificador para hacer esta explícita, pero si se agrega ref / out es el parámetro por referencia.

La confusión habitual aquí es la diferencia entre:

  • pasar un valor de tipo de valor (cambios en el valor de tipo no son visibles a la persona que llama, pero el valor de tipo ideal debería ser de todos modos inmutable)
  • pasar un valor de tipo de referencia (cambios en el tipo de valor son visibles para la persona que llama, pero de valor tipos deben ser, idealmente, de todas formas inmutables - tan importante que voy a decir dos veces; p)
  • pasando una referencia por el valor (cambios a campos / propiedades del tipo ref son visibles para la persona que llama, pero reasignación el tipo ref a un nuevo / diferente objeto es no visible)
  • pasando una referencia por referencia (cambios a campos / propiedades, y reasignar la referencia son visibles para la persona que llama)

Otros consejos

Al pasar por el valor es el valor predeterminado en C #. Sin embargo, si la variable que se pasa es del tipo de referencia, a continuación, usted está pasando el referencia por valor. Este es quizás el origen de su confusión.

Básicamente, si se pasa una referencia de valor, entonces usted puede cambiar el objeto que se refiere a estos cambios y se mantendrá fuera del método, pero no se puede hacer que la variable se refiere a un objeto diferente y tienen que el cambio persisten fuera de la método.

Los parámetros en C # se pasan "ByVal" por defecto. Tiene que especificar "ref" o "fuera" si quieres un comportamiento diferente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top