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 T
ist 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 T
tatsä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 Create
Methode 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.Pages
ist ein Repository von Seiten, die abgerufen typeof(T).Name
und als typeId
an die contentService.Create
Methode übergeben werden ( siehe hier ).