Certains peuvent-ils m'aider à comprendre pourquoi la classe hérite d'une base de même type?
Ce n'est pas le cas, il hérite de Page<T>
, mais T
lui-même est contraint d'être paramétré par un type dérivé de BasePage<T>
.
Pour déduire pourquoi, vous devez regarder comment le paramètre type T
est réellement utilisé. Après quelques recherches, en remontant la chaîne d'héritage, vous arriverez à cette 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);
}
}
Pour autant que je puisse voir, le seul but de la contrainte générique est de s'assurer que la Create
méthode renvoie le type le moins abstrait possible.
Je ne sais pas si cela en vaut la peine, cependant, mais il y a peut-être une bonne raison derrière cela, ou cela pourrait être uniquement pour des raisons de commodité, ou peut-être qu'il n'y a pas trop de substance derrière et c'est juste un moyen trop élaboré pour éviter un casting (BTW, I Je n'implique pas que ce soit le cas ici, je dis simplement que les gens le font parfois).
Notez que cela ne leur permet pas d'éviter la réflexion - le api.Pages
est un référentiel de pages qui obtient typeof(T).Name
et le transmet en tant que typeId
à la contentService.Create
méthode ( voir ici ).