Por que não podemos alterar o modificador de acesso ao substituir métodos em C #?

Em C #, não podemos alterar o modificador de acesso ao substituir um método da classe base. por exemplo

Class Base
{
   **protected** string foo()
   {
       return "Base";
   }
}

Class Derived : Base
{
   **public** override string foo()
   {
       return "Derived";
   }
}

Isso não é válido em C #, ele dará erro de tempo de compilaçã

Quero saber o motivo, por que não é permitido. Existe algum problema técnico ou pode levar a algo que não é consistente em termos de restrição de acesso ???

questionAnswers(8)

yourAnswerToTheQuestion