2008-11-20 11 views

Respuesta

4

¿El código va a ser utilizado por otros idiomas? Si es así, eso balancea la balanza hacia sobrecargas teniendo en cuenta la respuesta de Hamish. En particular, C# no admite parámetros opcionales, pero ...

Es cierto que esto no impediría que alguien use su código de C#, podría ser una molestia para ellos.

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

Si esto es para la construcción, también puede considerar el patrón del generador 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(); 

el que termina siendo muy legible creando al mismo tiempo una persona de una sola vez (en una expresión, y sin tener que mutar la propia persona - de hecho el mensaje el tipo es inmutable; es solo el constructor el que no lo es).

+0

Otro "Pro" de sobrecargas es que puede ver cuántas referencias tiene cada sobrecarga. Somenthing no puedes hacer con parámetros opcionales. – Burnsys

8

si los parámetros son opcionales (es decir, las sobrecargas son un subconjunto de los parámetros que acepta la firma de procedimiento completa), 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.

+0

excelente respuesta – baash05

0

FYI

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

Usted puede sobrecargar al hacer una función adicional con el parámetro adicional.

O puede agregar un parámetro opcional, PERO: ¡Tiene que recompilar todos los ensamblajes 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 se puede deslizar en un nuevo parámetro opcional a una función y se espera que sea totalmente compatible con versiones anteriores. Además, tal como lo entiendo, si cambia el valor predeterminado, debe reconstruir todos los ensamblados que llaman para que el cambio funcione.

Cuestiones relacionadas