protected
does mean that the derived class can access it, however, the derived class can access the property of it's own instance. In your example, you can access this.m_Title
since that belongs to the instance itself, but you are attempting to access the protected member of another instance (i.e. the instance in the list m_SubMenuItems
).
You need getter and setter methods to access it the way you're trying to.
Hopefully this makes it clearer:
class Foo {
protected int x;
public void setX(int x) {
this.x = x;
}
}
class Bar : Foo {
Foo myFoo = new Foo();
public void someMethod() {
this.x = 5; // valid. You are accessing your own variable
myFoo.x = 5; // invalid. You are attempting to access the protected
// property externally
myFoo.setX(5); // valid. Using a public setter
}
}