Call base all'interno del metodo sovrascritto

6

So che ci sono domande sulla chiamata del metodo base all'interno di un metodo sottoposto a override come questo . Ma cosa succede se un metodo sottoposto a override chiama solo la classe base? Questo cattivo / buono è degno? Sembra strano, perché sostituire un metodo solo per chiamare la base comunque?

Per esempio vedi:

public class BaseClass
{
    virtual public void Method1()
    {
        //Do stuff
    }
}

public class InheritingClass : BaseClass
{
    override public void Method1()
    {
        base.Method1();
    }
}
    
posta TheLethalCoder 15.12.2015 - 12:31
fonte

2 risposte

8

But what if an overridden method only calls the base class? Is this bad/good design?

Cattivo design ? No, implementazione piuttosto cattiva. È fuorviante per il programmatore di manutenzione. Quando non vedo un override allora so viene chiamata la base. Un override mi dice che c'è qualcosa di diverso, anche se viene chiamata anche la base.

Richiedere un override per chiamare la base senza un modello è Bad Design

thread di riferimento - il più popolare risponditore

La mia iniziale reazione a il modello di esclusione scandinava è: CODIFICARE L'ORRORE! Sembra che io sia costretto a leggere tutto questo, e poi di più, per assicurarmi che il "sotto-comportamento" non infrange il mio codice e viceversa.

Il modello di metodo dei modelli è un buon modo per esprimere il codice variabile all'interno di un flusso di codice più ampio e garantire un ordine di esecuzione corretto.

Nella mia esperienza è così tipico che una sottoclasse debba sapere quali metodi dichiarati dalla base chiamare e in ordine. Assumi una manciata di sottoclassi tutte con la stessa struttura di controllo cut-n-paste, aggiungi 5 anni di manutenzione; ora capisci perché preferisco 101 prove Wild Turkey .

P.S. Tutto questo è uno dei motivi principali per cui mi scuso contro l'uso eccessivo di interface s al posto delle classi abstract .

    
risposta data 15.12.2015 - 23:06
fonte
0

I metodi IMO, virtual , nella classe base, hanno un'implementazione molto semplice. Anche se abbiamo override la definizione del metodo virtual nella classe figlio, possiamo ancora chiamare il metodo virtual (con implementazione di base) mentre ha senso e non influenza il comportamento previsto del metodo overridden nel classe di bambino.

Ad esempio, BaseCalculator fa il vero lavoro. Il calcolatore sta decorando la libreria BaseCalculator estendendola.

public class BaseCalculator
{
    public virtual T Add<T>(T number01, T number02)
    {
        return number01 + number02;
    }
}

public class Calculator: BaseCalculator
{
    public override T Add<T>(T number01, T number02)
    {
        Console.WriteLine(number01 + " | " + number02);
        var result = base.Add<int>(1, 3);
        Console.WriteLine("Result: "+ result);
        return result;
    }
}

D: Cosa succede se un metodo sottoposto a override chiama solo la classe base?

A: Nel tuo caso, avendo il metodo della classe base come virtual , non abbiamo bisogno di override fino a quando non vogliamo cambiare il suo comportamento.

D: Questo è dannoso / buono?

A: Sì, potrebbe avere un design errato poiché potrebbe ingombrare il file del codice sorgente mentre aggiungiamo sostituzioni non necessarie.

Q: Sembra strano, perché sostituire un metodo solo per chiamare la base comunque?

A: BaseCalculator fa il vero lavoro. Il calcolatore sta decorando la libreria BaseCalculator estendendola.

Spero, aiuta!

    
risposta data 29.10.2018 - 15:03
fonte

Leggi altre domande sui tag