Поскольку Foo защищен, его нельзя увидеть никому, кроме производных классов.
Чтобы раскрыть его, вам нужно сделать:
class A
{
protected void Foo(){}
}
class B : A
{
public new void Foo()
{
base.Foo()
}
}
Другие ответы касались этого, но ни одинупомяните использование ключевого слова new для предоставления метода с тем же именем, но с другой доступностью.