Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Métodos estáticos dinâmicos ou sobrescritos

Boa noite!

Há alguma possibilidade de criar um método estático na classe mãe e utilizarmos nas classes filhas, tendo cada uma seu próprio retorno?

Exemplo:

Conta.GetContaCount() ContaPoupanca.GetContaCount() ContaCorrente.GetContaCount()

Gostaria de criar o método estático GetContaCount() apenas na classe Conta, porem sobrescrever ou referenciar dinamicamente para que quando uma classe filha utilize esse método seja retornado o total da conta especifica, não o total de todas as contas geral.

Implementando o método nas três classes individualmente funciona, mas além da repetição de código, não acredito que seja a forma ideal de fazer algo do tipo...

7 respostas

Oi Leonardo,

Eu sou mais do Java, mas acredito que deve ser igual no c#. Método estático é resolvido em tempo de compilação, vou dar um exemplo na linguagem Java.

Conta c = new ContaCorrente();

Se eu fizer c.metodoEstatico() ele vai chamar o método estático da classe Conta, enquanto que se o método não fosse estático, e tivesse implementado na ContaCorrente, ele chamaria o da filha.

Oi Alberto, tudo bem?

Então, é isso mesmo, se eu chamar o método através da classe filha ele executa o da classe filha, não a de Conta, porem para isso acontecer tenho que implementar o método em todas as classes filhas, pois como o método é estático ele não é acessível para as filhas como um método comum de classe mãe seria (não sei se ficou confuso rs).

Funciona, o problema é que além da repetição de código na implementação do método em cada classe filha, o visual studio lança um erro (mesmo compilando), informando que o método já existe na classe mãe, como se eu estivesse sobrepondo o método sem o override (já que estáticos aparentemente não podem receber virtual ou abstract na declaração).

De qualquer forma agradeço a ajuda.

Se vc chamar o método estático naquela variável c, ele chama o estático da filha? É isso? pq aí é sobreescrita padrão.

Sim, mas para isso acontecer preciso implementar o mesmo método na classe filha, sendo que um método não estático já seria herdado, sem a necessidade de repetir o código entende?

Basicamente a pergunta é como herdar métodos estáticos rs

Tem sim, só usar o override https://msdn.microsoft.com/pt-br/library/ebca9ah3.aspx

Gente, nesse link fala de métodos normais, não estáticos.

solução!

Realmente, sobre a sobre posição de static a solução que encontrei foi essa:

https://blogs.msdn.microsoft.com/kirillosenkov/2008/02/06/how-to-override-static-methods/