Let\'s assume I have a business case I want to use some model to represent a master-child structure. And there will be certain classes to inherit from both the master class and
Generics + potentially non-generic base class for your "with children" type is the standard solution. If you don't need BaseMaster
to be assignment-compatible between different types of child nodes you can remove base non-generic class.
Something roughly like following:
public class BaseMaster
{
public ReadOnlyCollection<BaseChild> Children { get; }
}
public class BaseMaster<T> : BaseMaster where T: BaseChild
{
public new IEnumerable<T> Children { get
{
return base.Children.Cast<T>();
};
}
}
You may get somewhere with generics:
public abstract class BaseMaster<TChild> where TCHild : BaseChild
{
// this probably doesn't have to be 'abstract' anymore
public abstract ReadOnlyCollection<TChild> Children { get; }
}
public class FirstRealMaster : BaseMaster<FirstRealChild>
{
}
But we don't know enough about the relation between Master and Child classes to be sure.