This is class design question.
I have main abstract class
public abstract class AbstractBlockRule
{
public long Id{get;set;}
public abstract
Your approach is typical (for example, IEnumerable
public abstract class AbstractBlockRule
{
public long Id{get;set;}
public abstract List Restrictions { get; set; }
}
public interface IRestriction
{
object Limit { get; }
}
public interface IRestriction : IRestriction
where T:struct
{
// hide IRestriction.Limit
new T Limit {get;}
}
public abstract class RestrictionBase : IRestriction
where T:struct
{
// explicit implementation
object IRestriction.Limit
{
get { return Limit; }
}
// override when required
public virtual T Limit { get; set; }
}
public class TimeRestriction : RestrictionBase
{
}
public class AgeRestriction : RestrictionBase
{
}
public class BlockRule : AbstractBlockRule
{
public override List Restrictions { get; set; }
}
I also showed using a base restriction class here, but it is not required.