2012-09-14 14 views
5

¿Puedo tener dos nombres de la misma función con los mismos parámetros pero con un significado diferente?función de sobrecarga

Por ejemplo:

public void test(string name) 

public void test(string age) 

Gracias.

+0

Por supuesto, si representara 'age' como [' TimeSpan'] (http://msdn.microsoft.com/en-us/library/system.timespan.aspx) esto no sería un problema. – Rawling

+0

@Rawling o simplemente, simplemente, cualquier tipo de tipo numérico. =) –

+0

tiene un parámetro común como 'string args' –

Respuesta

4

No, no puedes. La firma no es diferente, no importa cuáles sean los nombres de los parámetros.

métodos son declarados en una clase o estructura especificando el nivel de acceso, tales como modificadores públicas o privadas, opcionales, tales como abstracto o sellado, el valor de retorno, el nombre del método, y cualquier parámetro de método. Estas partes juntas son la firma del método.

http://msdn.microsoft.com/en-us/library/ms173114.aspx

Al igual que algunas otras respuestas han declarado, tenga en cuenta el tipo de datos que se están tomando en. El nombre es de hecho una cadena típica, pero qué edad tiene que ser? Si permite que sea, por ejemplo, int, puede sobrecargar su método como lo desee.

1

Signatures and Overloading

Si se necesita un método con un significado diferente ¿por qué no crear un método con un nombre diferente? Sería confuso usar el mismo nombre de método para diferentes cosas en el mismo objeto.

3

No, no puede sobrecargar en un tipo de devolución o un nombre de parámetro. A diferencia de algunos otros lenguajes (más notablemente, Objective C) el nombre del parámetro no es parte de la firma de su función.

La firma de un método consiste en el nombre del método y el tipo y tipo (valor, referencia o salida) de cada uno de sus parámetros formales, considerados en el orden de izquierda a derecha. La firma de un método específicamente no incluye el tipo de devolución, ni incluye el modificador de params que se puede especificar para el parámetro más a la derecha.


incluso allí no es exactamente el nombre del parámetro que se convierte en parte del selector.

+0

+1, información interesante sobre Objective C – PeteH

2

Puede tener métodos estáticos y no estáticos con el mismo nombre, pero diferentes parámetros que siguen las mismas reglas que la sobrecarga de métodos, simplemente no pueden tener exactamente la misma firma.

+0

... ¡pero sería una mala idea en cuanto al mantenimiento! – PeteH

1

Usted podría mezclar juntos estos métodos que utilizan parámetros opcionales y valores por defecto:

public void test(string name = null, string age = null) 
{ 
    if (name != null) 
    { 
    // Do something 
    } 
    else if (age != null) 
    { 
    // Do something else 
    } 
} 

Y se podría llamar a este método así:

test(name: "John"); 
test(age: "30"); 

No muy limpio, pero todavía utilizable.

0

No: el compilador arroja un error porque el compilador utiliza parámetros para determinar qué método llamar, no el tipo de devolución.

0

NO.

Un FUNCIÓN SOBRECARGADA debe tener diferente FIRMA. i.e.- los argumentos deben ser diferentes, ya sea en términos de número de argumentos o en el orden de diferentes argumentos de tipos de datos.

Cuestiones relacionadas