¿Pueden algunos ayudarme a entender por qué la clase hereda de una base del mismo tipo?
No lo es, está heredando de Page<T>
, pero T
está limitado a ser parametrizado por un tipo derivado de BasePage<T>
.
Para inferir por qué, debe observar cómo T
se usa realmente el parámetro de tipo . Después de investigar un poco, a medida que avanzas en la cadena de herencia, llegarás a esta clase:
( 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);
}
}
Hasta donde puedo ver, el único propósito de la restricción genérica es asegurarse de que el Create
método devuelva el menor tipo abstracto posible.
Sin embargo, no estoy seguro de si vale la pena, pero tal vez haya una buena razón detrás de esto, o podría ser solo por conveniencia, o tal vez no haya demasiada sustancia detrás y sea solo una forma demasiado elaborada de evitar un yeso (BTW, I No estoy insinuando que ese sea el caso aquí, solo digo que la gente hace eso a veces).
Tenga en cuenta que esto no les permite evitar la reflexión: api.Pages
es un repositorio de páginas que obtiene typeof(T).Name
y lo pasa typeId
al contentService.Create
método ( ver aquí ).