Если вы делаете Foo защищенным,
class A
{
protected int foo;
}
тогда подойдет простая база:
void bar()
{
//I want to access foo
base.foo; // will work now
// base.base.foo // Doesn't work, of course
}
Но было бы лучше создать (защищенное) свойство вокруг foo:
class A
{
private int _foo;
protected int Foo
{
get { return _foo; }
set { _foo = value; }
}
}