Pregunta

En VB.NET, ¿cuál es mejor usar: sobrecarga de funciones o parámetros predeterminados?

¿Fue útil?

Solución

¿El código será utilizado por otros idiomas? Si es así, eso balancea el equilibrio hacia las sobrecargas sin dejar de tener en cuenta la respuesta de Hamish. En particular, C # no admite parámetros opcionales, pero ...

Es cierto que esto no evitaría que alguien use su código de C #, simplemente podría ser un dolor para ellos.

Si hay muchos parámetros y lógicamente representan algo, es posible que desee considerar encapsularlos juntos, de la misma manera que Process funciona con ProcessStartInfo . Eso es particularmente bueno de C # debido a los inicializadores de objetos.

Si esto es para construcción, también puede considerar el patrón de construcción como una variante de esto. Por ejemplo, en Protocol Buffers puedo hacer algo como:

Person jon = new Person.Builder { Name="Jon", Age=32,
                                  Spouse="Holly", Kids=3 }.Build();

que termina siendo muy legible mientras se crea una persona de una vez (en una expresión, y sin tener que mutar a la persona misma; de hecho, el tipo de mensaje es inmutable; solo el constructor no lo es).

Otros consejos

si los parámetros son opcionales (es decir, las sobrecargas son un subconjunto de los parámetros que acepta la firma completa del procedimiento), entonces los parámetros predeterminados u opcionales tendrían más sentido.

Si la sobrecarga permite un tipo diferente para el parámetro o es un parámetro semánticamente diferente que la rutina interpretará de manera diferente, entonces las sobrecargas tendrían más sentido.

FYI

Si desea agregar un parámetro a una función o método que se llama desde otros ensamblados, entonces:

Puede sobrecargar haciendo una función adicional con el parámetro adicional.

O puede agregar un parámetro opcional, PERO: ¡Tiene que recompilar todos los ensamblados que llaman a esta función, incluso si no necesitan usar el nuevo parámetro opcional! Esto no suele ser lo que la gente espera (especialmente aquellos acostumbrados a cómo funciona VB6). Básicamente, no puede introducir un nuevo parámetro opcional en una función y esperar que sea totalmente compatible con versiones anteriores. Además, según tengo entendido, si cambia cuál es el valor predeterminado, debe reconstruir todos los ensamblados de llamadas para que el cambio funcione.

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