我有一个QueryFilter<TSearchFilter>
类(请参见下文)。我创建了一个从该类继承的QueryFilter
类。我当前正在使用QueryFilter
而不指定类型,例如:
var queryFilter = new QueryFilter();
为此,我创建了一个伪造的EmptySearchFilter
类来实现此目的。这很完美;没问题。
public class QueryFilter<TSearchFilter> where TSearchFilter : class
{
public QueryFilter()
{
SearchFilter = (TSearchFilter)Activator.CreateInstance(typeof(TSearchFilter));
}
public string SortBy { get; set; }
public int PageFirstIndex { get; set; }
public byte PageSize { get; set; }
public TSearchFilter SearchFilter { get; set; }
}
public class QueryFilter : QueryFilter<EmptySearchFilter> { }
public class EmptySearchFilter { }
但是,我认为也许可以通过以下方式避免使用这种假类(EmptySearchFilter
):
public class QueryFilter : QueryFilter<typeof(Class)>{ }
有没有办法做到这一点?
答案 0 :(得分:2)
您可以像这样反转继承链:
public class QueryFilter
{
public string SortBy { get; set; }
public int PageFirstIndex { get; set; }
public byte PageSize { get; set; }
}
public class QueryFilter<TSearchFilter> : QueryFilter
where TSearchFilter : class, new()
{
public QueryFilter()
{
SearchFilter = new TSearchFilter();
}
public TSearchFilter SearchFilter { get; set; }
}
这样,QueryFilter
不需要使用伪造的类。
此外,我添加了一个new()
约束来摆脱Activator.CreateInstance
的调用。