我无法使用override
因为类型不匹配而且我已经读过我不应该使用new
来隐藏它,那么我该如何实现呢?
SearchBase和ResultBase适用于80%的实体,但有些实体需要特定的实现。
我看到的这个主要问题是当我使用new
时,它在编译期间全部输入并且在调试器中看起来很好但是将此对象传递给System.Web.Mvc.Controller.Json()
似乎在序列化它时遇到问题它们来了out null。
public class SearchBase<T>
{
public virtual ResultBase result { get; set; }
}
public class SearchImp : SearchBase<SearchImp>
{
public override ResultImp result { get; set; }
}
public class ResultBase
{
}
public class ResultImp : ResultBase
{
}
答案 0 :(得分:2)
你可以改用它:
public class SearchBase<T, TResult> where T: ResultBase
{
public TResult result { get; set; }
}
public class SearchImp : SearchBase<SearchImp, ResultImp>
{
public TResult result { get; set; }
}
public class ResultBase
{
}
public class ResultImp : ResultBase
{
}
这样你就不需要覆盖任何东西(这里没有真正覆盖),你可以保持它的类型安全。