C# 维护控件之间的子/父关系
我正在编写一个WP7GUI,并设计了一个控件类和一个ParentControl类,该类派生自控件并具有一系列子控件。但是,将子项添加到ParentControl实例时,我无法访问该子项的父项引用,因为我将其设置为“受保护”,不受控件用户的影响 准确的误差为C# 维护控件之间的子/父关系,c#,user-interface,user-controls,polymorphism,parent-child,C#,User Interface,User Controls,Polymorphism,Parent Child,我正在编写一个WP7GUI,并设计了一个控件类和一个ParentControl类,该类派生自控件并具有一系列子控件。但是,将子项添加到ParentControl实例时,我无法访问该子项的父项引用,因为我将其设置为“受保护”,不受控件用户的影响 准确的误差为 无法通过“Control”类型的限定符访问受保护成员“Control.Parent”; 限定符的类型必须为“ParentControl”(或从中派生) 公共抽象类控件//如按钮或单选按钮 { 公共ParentControl父项{get;p
无法通过“Control”类型的限定符访问受保护成员“Control.Parent”;
限定符的类型必须为“ParentControl”(或从中派生)
公共抽象类控件//如按钮或单选按钮
{
公共ParentControl父项{get;protected set;}
}
公共抽象类ParentControl:控件//如面板或菜单
{
受保护的列表子项=新列表();;
公共void AddChild(控制子项,int索引)
{
NeedSizeUpdate=true;
if(child.Parent!=null)
child.Parent.RemoveChild(child);
child.Parent=this;//如何访问父级?
子项。插入(索引,子项);
onchildaded(索引,子项);
}
}
我该如何解决这个问题?是的,这是因为其他东西可能派生自
控件,而父控件只能访问它派生自的控件的基本成员。例如,如果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
才能访问它。我强烈建议永远不要将Control
用作自定义类名称similar SO Post-
interface IChildControl
{
ParentControl Parent { get; set; }
}
public abstract class Control : IChildControl //such as a button or radio button
{
ParentControl IChildControl.Parent { get; set; }
}