2009-05-22 17 views
6

Algo así como:¿Una breve guía general para pasar los parámetros del método por ref o por valor (C#)?

  • si el valor de la variable después de la llamada al método tiene que ser devuelto:
  • si se puede instanciar antes de la llamada al método usa ref
  • si no es necesario crear una instancia antes de que la llamada se debe usar a cabo

  • si el valor de la variable se utiliza para devolver, decidir o calcular otros valores de la llamada al método no utilice ni ref cabo

¿Lo recibí correctamente? ¿Cuál es su breve guía?

Respuesta

0

No estoy seguro si esto es realmente respondiendo a su pregunta, pero un buen uso de pasar un valor de referencia (utilizando la palabra clave out) que he encontrado es ...

int i = 0; 

if (int.TryParse("StringRepresentation", out i) 
{ 
    // do something with i which has taken the value of a the previous successful TryParse 
} 
4

Para los tipos de valor:

  • Si lo que desea es utilizar el valor contenido Y NO alterarlo en el lugar original utilizar el método predeterminado que pasa (por valor)
  • Si necesita modificarlo en la tienda original, utilice ref. Ejemplo:

    int a = -3; 
    
    protected void EnsurePositiveValues(ref int value) 
    { 
        if (value < 0) 
         value = 0; 
    } 
    

Para los tipos de referencia:

  • Si necesita sólo tiene que utilizar la instancia o alterarlo utilizar el método de pase por omisión (por referencia; debería ser llamado "por copia de referencia")
  • Si necesita (re) asignar en la referencia original, utilice la referencia. Ejemplo:

    User u = MembershipAPI.GetUser(312354); 
    
    protected void EnsureUser(ref User user) 
    { 
        if (user == null) 
         user = new User(); 
    } 
    
1

También es necesario tener en cuenta los tipos de valor y de referencia. Al pasar un tipo de referencia a un método como parámetro, pasa el puntero a la variable. Esto significa que dentro del método puede hacer cambios a la variable y estarán disponibles para el código que llamó al método; sin embargo, si lo establece en nulo, solo está configurando el puntero como nulo y la variable estará intacta cuando su método devuelve

Cuestiones relacionadas