Qualcuno può aiutarmi a capire perché la classe eredita da una base dello stesso tipo?
Non lo è, sta ereditando Page<T>
, ma T
è costretto a essere parametrizzato da un tipo da cui deriva BasePage<T>
.
Per dedurre il perché, è necessario esaminare come T
viene effettivamente utilizzato il parametro type . Dopo aver scavato un po ', mentre salite la catena dell'eredità, vi imbatterete in questa 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);
}
}
Per quanto posso vedere, l'unico scopo del vincolo generico è assicurarsi che il Create
metodo restituisca il tipo meno astratto possibile.
Non sono sicuro se ne valga la pena, però, ma forse c'è qualche buona ragione dietro, o potrebbe essere solo per comodità, o forse non c'è troppa sostanza dietro di esso ed è solo un modo eccessivamente elaborato per evitare un cast (BTW, I non sto insinuando che è il caso qui, sto solo dicendo che la gente lo fa a volte).
Nota che ciò non consente loro di evitare la riflessione: api.Pages
è un repository di pagine che ottiene typeof(T).Name
e lo passa typeId
al contentService.Create
metodo ( vedi qui ).