Dovremmo sovrascrivere tutti gli overload di metodi

0

Solitamente i sovraccarichi di metodo delegano i loro parametri a sovraccarichi più dettagliati con valori predefiniti. ecco un esempio

A(x) => A(x, null);
A(x, y) => A(x, y, null);
A(x, y, z) => ...;

Cosa devo fare se voglio sovrascrivere questo metodo e apportare alcune modifiche prima di chiamare il metodo di base?

Se sovrascrivo solo il sovraccarico più dettagliato, allora mi affido ai dettagli di implementazione di genitore. se in seguito, il genitore non delegherà tutti i sovraccarichi al sovraccarico più dettagliato, allora la mia implementazione si interrompe (non fa ciò che intendevo).

override A(x, y, z) => base.A(foo(x), y, z);

Se sovrascrivo tutti i sovraccarichi, devo copiare i parametri predefiniti usati nel metodo base. la mia implementazione non si interrompe, tuttavia può essere diversa dai genitori in seguito.

override A(x) => A(x, null);
override A(x, y) => A(x, y, null);
override A(x, y, z) => base.A(foo(x), y, z);

quale è corretto?

    
posta M.kazem Akhgary 13.12.2018 - 11:17
fonte

2 risposte

3

Questo dipende anche dalla lingua. Non tutti i metodi della classe base possono essere sovrascrivibili. Per un linguaggio che fornisce metodi non sostituibili, mi aspetto che il sovraccarico più dettagliato sia sovrascrivibile.

Quando tutti i metodi sono sovrascrivibili, l'approccio più proficuo è quello di sovrascriverli tutti.

    
risposta data 13.12.2018 - 11:26
fonte
0

Che ne dici dell'opzione 3, dove non hai nessun public virtual membri, e loro tutti chiamano un protected virtual DoA(x, y, z) ?

Quindi non puoi entrare nel caso in cui i cambiamenti nella base interrompano la sottoclasse.

    
risposta data 13.12.2018 - 14:24
fonte

Leggi altre domande sui tag