【发布时间】:2014-02-07 19:02:08
【问题描述】:
这是课程设计问题。
我有主要的抽象类
public abstract class AbstractBlockRule
{
public long Id{get;set;}
public abstract List<IRestriction> Restrictions {get;};
}
public interface IRestriction{}
public interface IRestriction<T>:IRestriction where T:struct
{
T Limit {get;}
}
public TimeRestriction:IRestriction<TimeSpan>
{
public TimeSpan Limit{get;set;}
}
public AgeRestriction:IRestriction<int>
{
public int Limit{get;set;}
}
public class BlockRule:AbstractBlockRule
{
public virtual List<IRestriction> Restrictions {get;set;}
}
BlockRule rule=new BlockRule();
TimeRestriction t=new TimeRestriction();
AgeRestriction a=new AgeRestriction();
rule.Restrictions.Add(t);
rule.Restrictions.Add(a);
我必须使用非泛型接口 IRestriction 以避免在主抽象类中指定泛型类型 T。我对泛型很陌生。谁能告诉我如何更好地设计这个东西?
【问题讨论】:
-
对我来说很难改进你的代码。如果您愿意,非通用基本接口可以具有属性
ValueType BoxedLimit {get;},但我不确定它是否有用。毕竟,你为什么需要不同类型对象的List<>? -
(当然,使泛型接口协变
IRestriction<out T>的明显想法在将它与值类型(结构)一起使用时没有用,因为 C# 和 .NET 不支持与值类型。) -
我不确定您为什么不将抽象类或方法设为通用。
Limit是最小值还是最大值?如果是这样,也许IComparable会更有用。