2012-09-14 17 views
5

Posso avere lo stesso nome di funzione con gli stessi parametri ma con significato diverso.sovraccarico funzione

Ad esempio:

public void test(string name) 

public void test(string age) 

Grazie.

+0

Ovviamente, se si rappresentasse 'age' come [' TimeSpan'] (http://msdn.microsoft.com/en-us/library/system.timespan.aspx) questo non sarebbe un problema. – Rawling

+0

@Rawling o in effetti, abbastanza semplicemente, qualsiasi forma di tipo numerico. =) –

+0

hanno un parametro comune come 'string args' –

risposta

4

No, non è possibile. La firma non è diversa - non importa quali siano i nomi dei parametri.

metodi sono dichiarati in una classe o struct specificando il livello di accesso come ad esempio, modificatori opzionali pubbliche o private, come astratto o sigillato, il valore di ritorno, il nome del metodo, e tutti i parametri di metodo. Queste parti insieme sono la firma del metodo.

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

Come poche altre risposte hanno dichiarato, considerare il tipo di dati che si sta prendendo in. Nome è davvero una stringa tipica, ma che l'età deve essere? Se si consente che sia un - ad esempio - int, è possibile sovraccaricare il metodo come desiderato.

1

No. Signatures and Overloading

Se avete bisogno di un metodo con significato diverso perché non vuoi creare un metodo con un nome diverso? Sarebbe fuorviante usare lo stesso nome di metodo per cose diverse sullo stesso oggetto.

3

No, non è possibile sovraccaricare un tipo di ritorno o un nome parametro. A differenza di altre lingue (in particolare, l'Objective C) il nome del parametro non fa parte della firma della funzione.

La firma di un metodo consiste nel nome del metodo e del tipo e tipo (valore, riferimento o output) di ciascuno dei suoi parametri formali, considerati nell'ordine da sinistra a destra. La firma di un metodo in particolare non include il tipo restituito, né include il modificatore params che può essere specificato per il parametro più a destra.


anche lì non è esattamente il nome del parametro che entra a far parte del selettore.

+0

+1, informazioni interessanti sull'obiettivo C – PeteH

2

È possibile avere metodi statici e non statici con lo stesso nome, ma diversi parametri che seguono le stesse regole dell'overload del metodo, semplicemente non possono avere esattamente la stessa firma.

+0

... ma sarebbe una cattiva idea per quanto riguarda la manutenzione! – PeteH

1

Potreste mescolare insieme questi metodi che utilizzano parametri opzionali e valori di default:

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

E si potrebbe chiamare questo metodo come quello:

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

non molto pulita, ma ancora utilizzabili.

0

No - il compilatore genera un errore perché il compilatore utilizza i parametri per determinare quale metodo chiamare, non il tipo restituito.

0

NO.

An FUNZIONE SOVRACCARICABILE deve avere SIGNATURE diverso. Gli argomenti i.e.- devono essere diversi, in termini di numero di argomenti o di ordine di diversi tipi di dati.

Problemi correlati