Pregunta

Por favor, ayúdame aquí porque me estoy confundiendo un poco ... Tengo un formulario en un proyecto de c.# winforms y un par de métodos que se supone que realizan algunas tareas para esta forma en particular y todos derivados, por lo que uno de esos métodos auxiliares puede Haz el ejemplo ... este debería llenar comboBoxes con un conjunto de datos. Está funcionando correctamente ahora, pero cuando codifiqué el método con esta firma

protected void FillComboBox(kComboBox target, IEntClass_DA entity)
        {
            target.DataSource = entity.GetList().Tables[0];
            target.DisplayMember = "name";
            target.ValueMember = "id";
        }

Vi que el miembro de la pantalla y el valor de Valuember en los Comboboxes no contenían los valores después de la llamada del método. Solo pensé que debería usar los parámetros de Ref para que las asignaciones no se desperdicien en variables de referencia de solo lectura.

Estaba bien para entonces, pero más tarde, haciendo un ejercicio de pasar toda la forma como parámetro, el compilador me advirtió con el aviso de que esto no podía pasar como un parámetro REF porque es de solo lectura. Bien, entonces sigo trabajando y veo que incluso sin la palabra clave REF puedo usar la variable REF del formulario, actualizar algunas propiedades y ver los cambios.

Entonces, ¿qué está sucediendo aquí? ¿Pasar una referencia del control al método ayudante me da la capacidad de cambiar sus miembros incluso cuando no usa el parámetro Ref?

Gracias.

¿Fue útil?

Solución

Su última declaración es absolutamente correcta. Estás pasando un referencia al control; puedes cambiar el contenido de ese control a través de la referencia, pero si cambia el valor del parámetro para referirse a un control completamente diferente, ese cambio no se propagaría al código de llamada.

Ver Mi artículo sobre pases de parámetros Para obtener más detalles de esta área comúnmente molesta.

Otros consejos

Está pasando un tipo de referencia, por lo que debe haber el mismo resultado si usa REF o no ...

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