1

私はWP7 GUIをコーディングしており、Controlクラスと、Controlから派生し、子コントロールのリストを持つParentControlクラスを設計しました。ただし、子を ParentControl インスタンスに追加すると、コントロールのユーザーから「保護」するように設定したため、子の親参照にアクセスできません。

正確なエラーは


「タイプ 'Control' の修飾子を介して保護されたメンバー 'Control.Parent' にアクセスできません。
修飾子はタイプ 'ParentControl' (またはそれから派生したもの) でなければなりません」


    public abstract class Control //such as a button or radio button
    {
        public ParentControl Parent { get; protected set; }
    }


    public abstract class ParentControl : Control //such as a panel or menu
    {
        protected List<Control> children = new List<Control>();;

        public void AddChild(Control child, int index)
        {
            NeedSizeUpdate = true;

            if (child.Parent != null)
                child.Parent.RemoveChild(child);
            child.Parent = this; //How do I access the parent?
            children.Insert(index, child);

            OnChildAdded(index, child);
        }
    }

どうすればこれを修正できますか?

4

1 に答える 1

0

はい、これは、他のものが から派生する可能性がありControl、派生ParentControl元のコントロールの基本メンバーにしかアクセスできないためです。たとえば、Control2から派生した場合Control、から派生ParentControlしないためControl2、その基本メンバーにアクセスできませんでした。

したがって、Parentパブリック プロパティを作成するか、コントロールの一般ユーザーから隠しておきたい場合は、インターフェイスを介してアクセスし、明示的に実装することができます。

interface IChildControl
{
    ParentControl Parent { get; set; }
}

public abstract class Control : IChildControl //such as a button or radio button
{
    ParentControl IChildControl.Parent { get; set; }
}

明示的な実装 ( ) は、インスタンスIChildControl.Parentだけを持つコンシューマーにはプロパティが表示されないことを意味します。アクセスするには、明示的にキャストする必要があります。ControlParentIChildControl

于 2012-05-30T08:03:17.800 に答える