Вот пример , почему не имеет смысла переопределять видимость:
interface someI
{
void doYourWork();
}
public class A : someI
{
public void doYourWork()
{
//...
}
}
public class B : someI
{
private void doYourWork()
{
//...
}
}
void Main()
{
List<someI> workers = getWorkers();
foreach(var worker in workers)
worker.doYourWork();
}
Что происходит, когда ваш работник типа B? Вы вызываете метод, как если бы он был публичным, но это частный метод. Если вы хотите эту функциональность, то это не частный метод?
Если вы хотите, чтобы он был общедоступным только при обращении через ваш интерфейс, то вы можете определить его так:
public class B : someI
{
void someI.doYourWork()
{
//...
}
}
И в итоге вы получите:
var b = new B();
b.doYourWork(); // Not accessible
((someI)b).doYourWork(); // Accessible