假设你有以下代码:
public abstract class MenuItem
{
protected string m_Title;
protected int m_Level;
protected MenuItem m_ParentItem;
public event ChooseEventHandler m_Click;
protected MenuItem(string i_Title, int i_Level, MenuItem i_ParentItem)
{
m_Title = i_Title;
m_Level = i_Level;
m_ParentItem = i_ParentItem;
}
}
和
public class ContainerItem : MenuItem
{
private List<MenuItem> m_SubMenuItems;
public ContainerItem(string i_Title, int i_Level, MenuItem i_ParentItem)
:base(i_Title, i_Level, i_ParentItem)
{
m_SubMenuItems = new List<MenuItem>();
}
public string GetListOfSubItems()
{
string subItemsListStr = string.Empty;
foreach (MenuItem item in m_SubMenuItems)
{
item.m_Title = "test"; // Cannot access protected member the qualifier
must be of type 'Ex04.Menus.Delegates.ContainerItem'
}
return subItemsListStr;
}
}
我真的不理解这个错误背后的逻辑,我已经阅读了http://blogs.msdn.com/b/ericlippert/archive/2005/11/09/491031.aspx,但是根据 Protected 访问修饰符的定义,我仍然认为这完全是不合逻辑的。我认为它应该可以从定义它的同一类(
MenuItem
)以及所有派生类(ContainerItem
等)中访问。如果因为多态设计原因持有
MenuItem
的引用,那么如何访问受保护成员,比如m_Title
?
MenuItem
对象集合,而我想要做的就是能够从基类中获取它们已经继承的成员变量的值,无论它是哪个具体类型。我希望能够以多态的方式(基类视图)访问它们的值。 - JavaSaprotected
”意味着它们应该是private
。当然,属性本身将是public
或internal
,这取决于设计的合理性。 - Jon