Czy ktoś może mi pomóc zrozumieć, dlaczego klasa dziedziczy po bazie tego samego typu?
Nie jest, dziedziczy po Page<T>, ale Tsam w sobie jest sparametryzowany przez typ, z którego pochodzi BasePage<T>.
Aby wywnioskować, dlaczego, musisz spojrzeć na to, jak Tfaktycznie używany jest parametr type . Po pewnym kopaniu, idąc w górę łańcucha spadkowego, natkniesz się na tę klasę:
( 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);
}
}
O ile widzę, jedynym celem ogólnego ograniczenia jest upewnienie się, że Createmetoda zwraca możliwie najmniej abstrakcyjny typ.
Nie jestem jednak pewien, czy warto, ale może jest za tym jakiś dobry powód lub może to być tylko dla wygody, a może nie kryje się za tym zbyt wiele substancji i to po prostu zbyt skomplikowany sposób na uniknięcie obsady (BTW, ja nie sugeruję, że tak jest w tym przypadku, mówię tylko, że ludzie czasem tak robią).
Należy pamiętać, że to nie pozwala im uniknąć refleksji - w api.Pagesto repozytorium stron, które uzyskuje typeof(T).Namei przekazuje go jako typeIddo contentService.Createmetody ( patrz tutaj ).