次のコードがあると考えてください。
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
しかし、私はまだそれが完全に非論理的であると思います保護されたアクセス修飾子の定義に従います。MenuItem
定義されたのと同じクラスから、そしてそのすべての派生クラスからアクセスできるはずだと思います。(ContainerItem
など)(ポリモーフィズムの設計上の理由から)
m_Title
への参照を保持しながら、保護されたメンバーにどのようにアクセスしますか?MenuItem