I was tracking down a bug and I found this in the Avalon Dock 2.0 source code:

```
 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` has a member `string PreviousContainerId { get; set; }`.

What does this pattern accomplish? I understand that you could not get/set the `PreviousContainerId` from outside the inheritance subtree unless you first cast the `LayoutContent` to an `ILayoutPreviousContainer`. But I don't understand *why* you would want this. 

Upon doing research about this pattern, I found this [SO post](https://stackoverflow.com/questions/3705308/c-property-overriding-by-specifying-the-interface-explicitly) which confused me some more. By implementing it this way, it is seemingly similar to having just a `virtual` property that would be implemented in a convoluted way:

```
public class SpecificLayoutContent : LayoutContent, ILayoutPreviousContainer
{
     // override LayoutContent.PreviousContainerId since it casts 'this' to an ILayoutPreviousContainer
     // which will then call this property
     string ILayoutPreviousContainer.PreviousContainerId{ /* ... */ }
}

```

Am I missing something?