Base de chamadas dentro do método overriden

6

Eu sei que há dúvidas sobre a chamada do método base dentro de um método substituído, como isso . Mas e se um método substituído apenas chamar a classe base? Isso é ruim / bom deign? Parece estranho, por que substituir um método apenas para chamar a base de qualquer maneira?

Por exemplo, veja:

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

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

2 respostas

8

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

Bad design ? Não, implementação bastante ruim. É enganoso para o programador de manutenção. Quando eu não vejo um override então eu conheço a base é chamada. Um override me diz que há algo diferente, mesmo que a base seja chamada lá também.

A necessidade de uma substituição para chamar a base sem um modelo é Bad Design

Tópico referenciado - respondedor mais popular

A minha reação inicial ao modelo de substituição escandinavo é: CODING HORROR! Parece que sou forçado a ler tudo isso e mais, para ter certeza de que o "sub-comportamento" não quebra meu código e vice-versa.

O Template Method Pattern é uma boa maneira de expressar código variável dentro de um fluxo de código maior e garantir a ordem de execução correta.

Na minha experiência, é muito típico que uma subclasse precise saber quais métodos declarados pela base devem ser chamados e em ordem. Tome um punhado de sub-classes com a mesma estrutura de controle cut-n-paste, adicione 5 anos de manutenção; Agora você entende por que eu prefiro 101 Wild Turkey .

P.S. Tudo isso é uma grande razão pela qual eu questiono o uso excessivo de interface s em vez de abstract classes.

    
por 15.12.2015 / 23:06
fonte
0

IMO, virtual methods, na classe base, tem uma implementação muito básica. Mesmo se nós override a definição do método virtual na classe filha, ainda podemos chamar o método virtual (com implementação básica) enquanto faz sentido e não afeta o comportamento pretendido do método overridden no aula de criança.

Por exemplo, BaseCalculator faz o trabalho real. A Calculadora está decorando a biblioteca BaseCalculator estendendo-a.

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

P: E se um método substituído apenas chamar a classe base?

A: No seu caso, tendo o método da classe base como virtual , não precisamos override até que desejemos alterar seu comportamento.

Q: Isto é bom / ruim deign?

A: Sim, pode haver um design ruim, pois pode sobrecarregar o arquivo de código-fonte enquanto adicionamos substituições desnecessárias.

P: Parece estranho, por que substituir um método apenas para chamar a base mesmo assim?

A: O BaseCalculator faz o trabalho real. A Calculadora está decorando a biblioteca BaseCalculator estendendo-a.

Espero que ajude!

    
por 29.10.2018 / 15:03
fonte