Un metodo sovraccarica l'altro o entrambi i metodi sono "sovraccaricati"?


13

Se creo questo metodo

public void foo()

E poi creo una versione sovraccarica come questa

public void foo( string bar )

Diciamo che le seconde funzioni sovraccaricano la prima, o entrambi i metodi sono ugualmente "sovraccaricati"?

Ciò implicherebbe (penso) che esiste una funzione di tipo base, che viene sovraccaricata, da un'altra funzione (un po 'come l'eredità, ma non proprio).

Supponendo che un metodo possa "sovraccaricarne un altro", implicherebbe anche termini come "sovraccarico" e "sovraccarico", se questa è una parola. Ma questo non sembra affatto giusto, soprattutto perché puoi avere diversi sovraccarichi.

Sono arrivato a questa domanda quando volevo scrivere il processo di creazione di un metodo sovraccarico e volevo il modo più corretto di scriverlo.

Esempi:

  • Sto sovraccaricando foo
  • Sto sovraccaricando foodifoo( string bar )
  • Sto creando un metodo sovraccarico
  • Sto facendo il foo sovraccarico

Quindi sì, questo tipo di mi ha fatto pensare, non sono sicuro di cosa farne. Esistono centinaia, se non migliaia, di descrizioni delle funzioni che sovraccaricano online, ma a prima vista non sono riuscito a trovare alcuna soluzione a questo.


Vorrei sapere perché la parola sovraccarico è stata usata per questo. Non sembra avere alcun senso. Cosa viene caricato? Come viene caricato di nuovo o eccessivamente?
Martin Maat,

@MartinMaat Hai letto la risposta accettata da thiton e il commento di kindall su di essa? Sembrano fare un buon lavoro nel spiegare cosa viene (sovraccaricato).
8

Ho letto quelli, spiegano il concetto, non l'etomologia.
Martin Maat,

Risposte:


29

Quando si parla di sovraccarichi, il nome della funzione è sovraccarico, non della funzione stessa. Le funzioni che sovraccaricano il nome sono "sovraccarichi" e sovraccaricano il nome, ma non vicendevolmente. Nel tuo esempio, "public void foo()"e "public void foo( string bar )"sia sovraccaricare il nome "foo". Pertanto, non è possibile parlare in termini di sovraccarico e sovraccarico di una delle funzioni, poiché non hanno una relazione diretta.

Nei tuoi esempi, puoi dire che stai sovraccaricando "pippo" (il nome) con "pippo (barra delle stringhe)" (la funzione), ma non puoi dire che crei un metodo sovraccarico, perché i metodi non sono mai sovraccarichi. Puoi dire che crei un metodo di sovraccarico. Formulare "rendere il foo sovraccarico" è solo un modo peggiore di dire "sovraccarico di foo".


Ma allora ogni funzione non sovraccaricherebbe il suo nome, anche se nessun'altra funzione ha la stessa?
leftaroundabout

Sono d'accordo con questo come risposta alla domanda generale di cui sopra. Ma se l'una chiama una delle funzioni dall'altra, allora percepisco un senso in cui l'una sovraccarica l'altra.
Joshua Drake,

3
@leftaroundabout: "Sovraccarico" implica che stai facendo più "caricamento" del solito, quindi il termine viene utilizzato solo quando hai più di una funzione con lo stesso nome.
kindall

Concordato con @kindall; la parola "sovraccarico" in un contesto di sviluppo software significa "assegnare più di un significato a"; sovraccarico di colonne in un DB (il significato dipende da altri campi), sovraccarico di parametri (significato dipende da altri parametri), ecc. Un metodo non sovraccarica nessun altro, ma se esiste più di un metodo con un nome , il nome è " sovraccarico".
KutuluMike

15

Direi semplicemente che fooè sovraccarico. Non c'è sicuramente relazione master / slave o genitore / figlio in corso qui.


2
Accetto: è il nome del metodo o dell'operatore che è sovraccarico, non il metodo stesso. Da non confondere con l' override , in cui l'implementazione di un determinato metodo in una sottoclasse soppianta l'implementazione nella classe genitore.
Caleb,

1
Sono d'accordo anche con questo, ma penso che Thiton faccia un lavoro migliore nel spiegarlo. La ringrazio per la risposta !
Willem D'Haeseleer,

3

Penso che un buon modo per esprimere ciò sia quello di concentrarsi sul risultato finale, non sulle modifiche apportate alla classe nel tempo. Quindi, invece di dire "Ho sovraccaricato 'pippo' con 'pippo (altri parametri)'," dici "pippo è una funzione sovraccarica, con" pippo () "e" pippo (altri parametri). ""

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.