Eai Fabio, beleza?
Isso é necessário para que você tenha acesso a classe que esta sendo herdada. Se isso não acontecesse basicamente a sua classe Diretor não seria um Funcionário também.
Imagina que você instancia um novo Diretor que herda de Funcionario, dai você precisa acessar algum método/propriedade de Funcionario, se a classe Funcionario não tivesse sido instanciada isso não seria possível.
Então isso é regra, sempre que você instancia um novo objeto, sua herança será instanciada também para que ela seja acessível.
Perceba que se a sua classe Funcionario possuir construtor com parametros, obrigatoriamente sua classe Diretor deve satisfazer esse construtor.
public class Funcionario
{
public int IdFuncionario { get; set; }
public Funcionario(int idFuncionario)
{
IdFuncionario = idFuncionario;
}
}
Dessa forma o compilador já estaria acusando
public class Diretor : Funcionario
{
}
Chamando o construtor com os parametros necessarios para criar tambem um funcionario
public class Diretor : Funcionario
{
public Diretor(int idFuncionario) : base(idFuncionario) {}
}