web-dev-qa-db-fra.com

Base d'appel à l'intérieur de la méthode remplacée

Je sais qu'il y a des questions sur l'appelant la méthode de base à l'intérieur d'une méthode remplacée telle que Ceci . Mais que se passe-t-il si une méthode remplacée n'appelle que la classe de base? Est-ce mauvais/bon daign? Cela semble juste étrange, pourquoi remplacer une méthode juste pour appeler la base quand même?

Par exemple, voir:

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

public class InheritingClass : BaseClass
{
    override public void Method1()
    {
        base.Method1();
    }
}
6
TheLethalCoder

Mais que se passe-t-il si une méthode remplacée n'appelle que la classe de base? Ce mauvais design/bon design est-il?

Bad Conception? Non, plutôt mauvaise mise en œuvre. C'est trompeur pour le programmeur de maintenance. Quand je ne vois pas de remplacement, je == savez La base est appelée. Un remplacement me dit qu'il y a quelque chose de différent, même si la base est appelée là aussi.


nécessitant un remplacement d'appeler la base sans modèle est mauvais

thread référencé - répondeur le plus populaire

My Initial Réaction à Le modèle de remplacement de scandinave est: Horreur codant! On dirait que je suis obligé de lire tout cela, puis de vous assurer que le "sous-comportement" ne casse pas mon code et vice versa.

Le modèle de méthode de modèle est un bon moyen d'exprimer un code variable dans un flux de code plus important et d'assurer une commande d'exécution correcte.

Dans mon expérience, il est tellement typique d'une sous-classe d'avoir à savoir quelles méthodes déclarées-déclarées à appeler et en ordre. Prenez une poignée de sous-classes toutes avec la même structure de contrôle CUT-PLETE, ajoutez 5 ans de maintenance; Maintenant, vous comprenez pourquoi je préfère 101 preuve Turquie sauvage .

P.s. Tout ce qui est une grande raison pour laquelle je rafraîchit la surutilisation de interfaces au lieu de abstract classes.

9
radarbob

IMO, virtual méthodes, en classe de base, ont une mise en œuvre très élémentaire. Même si nous override la définition de virtual méthode en classe enfant, nous pouvons toujours appeler la méthode virtual (avec la mise en œuvre de base) pendant son sens et n'affecte pas la Comportement de la méthode overridden dans la classe enfant.

Par exemple, le basocalcululator est le travail réel. La calculatrice décorait la bibliothèque de base de la base en l'étendant.

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;
    }
}

Q: Et si une méthode remplacée n'appelle que la classe de base?

A: Dans votre cas, avoir la méthode de la classe de base comme virtual, nous n'avons pas besoin de ne pas être override cela jusqu'à ce que nous voulions changer de comportement.

Q: Est-ce mauvais/bonne daign?

A : Oui, il pourrait une mauvaise conception car il peut encombrer le fichier de code source pendant que nous ajoutons des substituts inutiles.

Q: Cela semble juste étrange, pourquoi remplacer une méthode juste pour appeler la base quand même?

A : Basecalculator fait le vrai travail. La calculatrice décorait la bibliothèque de base de la base en l'étendant.

J'espère que ça aide!

0