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) 意味着只有一个Control实例的消费者不会看到该Parent属性。它必须显式转换为IChildControl才能访问它。

于 2012-05-30T08:03:17.800 回答