이것은 클래스 디자인 질문입니다.일반 인터페이스 상속 일반 - C#
는 난 그냥 메인 추상 클래스에서 제네릭 형식 T를 지정 피하기 위해 제네릭이 아닌 인터페이스 IRestriction를 사용할 필요가
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);
주요 추상 클래스를 가지고있다. 저는 제네릭을 처음 접했습니다. 어떤 사람이이 일을 더 잘 디자인하는 방법을 알려줄 수 있습니까?
코드를 개선하기가 어렵습니다.비 제네릭 기본 인터페이스는 원할 경우 'ValueType BoxedLimit {get;}'속성을 가질 수 있지만 유용하다고 확신하지는 않습니다. 결국, 당신은 왜 다른 타입의 객체들의'List <>'가 필요합니까? –
(C#과 .NET은 값 타입의 공분산을 지원하지 않기 때문에, 일반적인 형태의 공용 변수 인 'IRestriction'을 값 유형 (구조체)과 함께 사용하는 것은 당연한 생각입니다. –
I 왜 당신이 추상 클래스 나 메소드를 만들지 않는지 모르겠다. '제한'은 최소 또는 최대입니까? 그렇다면 아마'IComparable'이 더 유용 할 것입니다. –