我正在追踪一个错误,我在 Avalon Dock 2.0 源代码中发现了这个:
public abstract class LayoutContent : LayoutElement, /* ... */, ILayoutPreviousContainer
{
// ...
[XmlIgnore]
string ILayoutPreviousContainer.PreviousContainerId
{
get;
set;
}
protected string PreviousContainerId
{
get { return ((ILayoutPreviousContainer)this).PreviousContainerId; }
set { ((ILayoutPreviousContainer)this).PreviousContainerId = value; }
}
}
ILayoutPreviousContainer
有一个成员string PreviousContainerId { get; set; }
。
这个模式有什么作用?我知道您无法从继承子树外部获取/设置 ,除非PreviousContainerId
您先将. 但我不明白你为什么想要这个。LayoutContent
ILayoutPreviousContainer
在对这种模式进行研究后,我发现这篇SO 帖子让我更加困惑。通过以这种方式实现它,它似乎类似于只拥有一个virtual
以复杂方式实现的属性:
public class SpecificLayoutContent : LayoutContent, ILayoutPreviousContainer
{
// override LayoutContent.PreviousContainerId since it casts 'this' to an ILayoutPreviousContainer
// which will then call this property
string ILayoutPreviousContainer.PreviousContainerId{ /* ... */ }
}
我错过了什么吗?