Olá Ley, tudo bem?
Se o código é protected
é porque ele realmente não deve ser usado em um contexto fora da própria classe e as classes filhas. Classes externas só poderão utilizar esses códigos apenas por meios indiretos. Que é o que ocorre com o método GetBonificacao()
neste exemplo:
public Estagiario(double salario, string cpf)
:base(salario, cpf)
{
GetBonificacao();
}
public override void AumentarSalario()
{
// Qualquer código
}
protected override double GetBonificacao()
{
return Salario = Salario + Salario * .1;
}
Estes códigos dentro da classe Estagiario
funcionam bem. E ao criar o objeto do tipo Estagiario
em Program.cs
, o GetBonificacao()
também é executado, porque esse método foi chamado dentro da classe que ele pode ser usado. Mas não é possível utilizar o GetBonificacao()
fora da classe Estagiário
, porém, podemos executar esse código com uma gambiarra (que não é aconselhavel, porque se o método é protegido, deve ter um bom motivo para isso) dentro da classe Estagiário
:
public double Bonificar()
{
return GetBonificacao();
}
Com este código acima, é possível bonificar o Estagiario
, mesmo que esse método seja protegido, mas como disse, não é recomendado fazer isso.
Sugiro que faça testes com métodos protegido para ver até onde vai a limitação deles e o que pode fazer em relação às restrições deles.
Espero ter ajudado!