Können mir einige helfen, zu verstehen, warum die Klasse von einer Basis desselben Typs erbt?
Es ist nicht, es erbt von Page<T>, aber es Tist darauf beschränkt, durch einen Typ parametrisiert zu werden, von dem es abgeleitet ist BasePage<T>.
Um zu schließen, warum, müssen Sie sich ansehen, wie der Typparameter Ttatsächlich verwendet wird. Nach einigem Graben werden Sie auf diese Klasse stoßen, wenn Sie die Vererbungskette hinaufsteigen:
( 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);
}
}
Soweit ich sehen kann, besteht der einzige Zweck der generischen Einschränkung darin, sicherzustellen, dass die CreateMethode den am wenigsten abstrakten Typ zurückgibt, der möglich ist.
Ich bin mir nicht sicher, ob es sich lohnt, aber vielleicht steckt ein guter Grund dahinter, oder es könnte nur der Einfachheit halber sein, oder vielleicht steckt nicht allzu viel Substanz dahinter und es ist nur ein überaus ausgeklügelter Weg, eine Besetzung zu vermeiden (Übrigens, ich Ich will damit nicht andeuten, dass das hier der Fall ist. Ich sage nur, dass die Leute das manchmal tun.
Beachten Sie, dass dies ihnen nicht erlaubt, Reflexionen zu vermeiden. Dies api.Pagesist ein Repository von Seiten, die abgerufen typeof(T).Nameund als typeIdan die contentService.CreateMethode übergeben werden ( siehe hier ).