Como já diz o título, existe algum sentido em criar um método concreto dentro de uma classe abstrata?
Como já diz o título, existe algum sentido em criar um método concreto dentro de uma classe abstrata?
Se você possui uma classe abstrata e necessita que as classes filhas sempre implementem um método sempre de uma mesma forma, ai é mais vantajoso criar um método concreto, pois métodos concretos não necessitam de sobrescrita nas classes filhas.
Ai no caso, pra executar esse método, eu utilizaria o base.NomeDoMetodo()?
O base.NomeDoMetodo() é utilizado caso você faça uma sobrescrita de método.
Na classe base o método vai ser do tipo virtual, e na classe filha o método será override.
Desta forma o base.NomeDoMetodo() indica que você não quer utilizar a sobrescrita, e sim a definição do método na classe "Pai".
Acho que entendi. Mas por exemplo, se eu quiser executar um método concreto dentro de uma classe abstrata? De que forma eu faço isso sendo que não posso instanciar um objeto dessa classe.
Para fazer isso você tem que possuir uma classe filha, instanciar um objeto desta classe filha e fazer a chamada desse método.
Classes abstratas não são criadas para serem instanciadas realmente, a ideia de uma classe abstrata é que ela seja sempre utilizada para realizar herança, de forma a reduzir a repetição de código em seu programa.
Ahh saquei... aí no caso o tipo de referência dessa instância da classe filha deve ser do tipo mais genérico correto?
Na realidade a classe "Pai" é mais genérica (no sentido de generalizada). Por exemplo:Pessoa é a classe "pai" e Funcionario é a classe "filha". Ou seja todo Funcionario é uma Pessoa, mas nem toda Pessoa é um Funcionario.