Alguns podem me ajudar a entender por que a classe está herdando de uma base do mesmo tipo?
Não é, é herdado de Page<T>
, mas T
é restrito a ser parametrizado por um tipo derivado BasePage<T>
.
Para inferir o motivo, você deve observar como o parâmetro type T
é realmente usado. Após algumas escavações, à medida que você sobe na cadeia de herança, você se depara com esta classe:
( github )
public class GenericPage<T> : PageBase where T : GenericPage<T>
{
public bool IsStartPage {
get { return !ParentId.HasValue && SortOrder == 0; }
}
public GenericPage() : base() { }
public static T Create(IApi api, string typeId = null)
{
return api.Pages.Create<T>(typeId);
}
}
Tanto quanto posso ver, o único objetivo da restrição genérica é garantir que o Create
método retorne o tipo menos abstrato possível.
Mas não tenho certeza se vale a pena, mas talvez haja alguma boa razão por trás disso, ou possa ser apenas por conveniência, ou talvez não haja muita substância por trás disso e seja apenas uma maneira muito elaborada de evitar um elenco (BTW, eu não estou sugerindo que é o caso aqui, estou apenas dizendo que as pessoas fazem isso às vezes).
Observe que isso não permite que eles evitem a reflexão - api.Pages
é um repositório de páginas que é obtido typeof(T).Name
e o passa typeId
para o contentService.Create
método ( veja aqui ).