Modo standard per chiamare il metodo virtuale

2

Quindi di recente stavo lavorando a un progetto in cui avevo una classe base che forniva alcune funzionalità comuni. Aveva diverse funzioni virtuali (overridable in vb). Ho notato che alcuni di questi metodi si aspettavano che il metodo di override li chiamasse prima di eseguire qualsiasi lavoro, e altri si aspettavano che il lavoro fosse fatto prima che il metodo virtuale venisse chiamato.

C'è un modo standard per indicarlo? Convenzione di denominazione? Qualcos'altro?

    
posta Sam Axe 29.05.2016 - 18:59
fonte

1 risposta

3

Una soluzione è non dare alla classe derivata una scelta avendo un metodo non virtuale nella classe base e anche un metodo vuoto virtuale, che viene chiamato dal metodo non virtuale al momento giusto.

Il codice per i due casi potrebbe essere simile a questo:

class Base
{
    public void BaseBeforeDerived()
    {
        // do base work here

        BaseBeforeDerivedImpl();
    }

    protected virtual void BaseBeforeDerivedImpl()
    {
    }

    public void DerivedBeforeBase()
    {
        DerivedBeforeBaseImpl();

        // do base work here
    }

    protected virtual void DerivedBeforeBaseImpl()
    {
    }
}

Ora, quando una classe derivata sovrascrive un metodo, non importa quando chiama il metodo base (o anche se lo chiama).

    
risposta data 30.05.2016 - 20:58
fonte

Leggi altre domande sui tag