Foros del Web » Programación para mayores de 30 ;) » .NET »

C# - Diferencia en pasar un parametro por ref o no.

Estas en el tema de C# - Diferencia en pasar un parametro por ref o no. en el foro de .NET en Foros del Web. Buenas tardes amigos !!! Recientemente he estado realizando una .DLL para acceso a Datos a una Base de Datos cualquiera. Esta .DLL tiene método como: ...
  #1 (permalink)  
Antiguo 17/02/2008, 11:57
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 21 años, 5 meses
Puntos: 7
C# - Diferencia en pasar un parametro por ref o no.

Buenas tardes amigos !!!

Recientemente he estado realizando una .DLL para acceso a Datos a una Base de Datos cualquiera. Esta .DLL tiene método como:
Código:
public bool SPLectura(string nombreProcedimiento, DataTable tbDatos)
{}

public bool SPLectura(string nombreProcedimiento, clsParametros parametrosValor, DataTable tbDatos){}
Estos métodos me devuelven el objeto DataTable que he pasado con los datos rellenos. Muy bien, exactamente lo mismo que si delante de cada parámetro hubiera puesto "ref" delante.

La diferencia está en que si declaro estos métodos de mi clase con "ref" y llamo a estos métodos, si un DataTable es tipado me da un error de que no se puede convertir el DataTable tipado al tipo DataTable.

Entonces, ¿Por qué si paso un objeto con la palabra "ref" no funciona bien los parametros por referencia y si lo paso sin "ref" si funciona bien?, ¿Para que está la palabra clave "ref" si cuando declaro un método sin esta delante, también los objetos son pasados por referencia?

En fin, espero algún conocedor de .NET me pueda explicar estas dudas técnicas.

Un cordial saludo.
__________________
Charlie.
  #2 (permalink)  
Antiguo 17/02/2008, 19:48
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 17 años, 2 meses
Puntos: 87
Re: C# - Diferencia en pasar un parametro por ref o no.

Hola Charlie,

esto es simple digo al final de cuentas hay que remontarse a nociones basicas de .net

tipos por valor y tipos por referencia. los datatables son tipos por referencia y mas aun los tipados.

si tu quieres pasar la referencia de un tipo referencia esta violando la integridad de este es por eso que no te permite hacer eso.

es como dejar q tu metodo pueda modificar la direccion del heap de ese objeto en particular.

esto es un tema escabroso pero muy sencilla, en otra opcion podria smanejar tu parametro como out en vez de ref si lo que quieres es asignarlo internamente sin retornar nada en el mismo metodo.

saludos
peterpay
  #3 (permalink)  
Antiguo 18/02/2008, 01:55
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 21 años, 5 meses
Puntos: 7
Re: C# - Diferencia en pasar un parametro por ref o no.

Bueno, mi idea era poner esa palabra delante para que fuera más legible el código, sabía que sin ponerlo iba a funcionar, pero quería ponerlo (pensando que solo iba a sonar redundante) para que fuera algo más legible.

Creo que es más comodo ver:
Código:
PDameUsuarios(variableDni, variableSexo, ref dataTableUsuarios);
En el sentido de que asi sabes que el método es para que te devuelva datos, no para que reciba un datatable y luego trabaje con él. Ya que por ejemplo, un procedimiento que vaya a recibir un DataTable para realizar insercciones en la Base de Datos apartir de esos datos... no se encuentra diferencia.

Código:
PDameUsuarios(variableDni, variableSexo, dataTableUsuarios);
PInsertaUsuarios(variableDni, variableSexo, dataTableUsuarios);
En uno es para recibir datos y en el otro no... estaría bien poder indicar de alguna forma esto que menciono. (Se que se puede poner el <summary> y demás historias, pero bueno... quería algo más técnico)

Saludos y muchas gracias por tu respuesta.
__________________
Charlie.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:42.