這是類設計問題。通用接口繼承非泛型C#
我有主抽象類
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 <>? –
(當然,由於C#和.NET不支持與值類型的協方差,因此當您將它與值類型(結構)一起使用時,使通用接口協變'IRestriction'不明顯。) –
我不確定你爲什麼不製作抽象類或者通用的方法。 「限制」是最低還是最高?如果是這樣的話,「IComparable」可能會更有用。 –