Bazıları sınıfın neden aynı tip bir temelden devraldığını anlamama yardımcı olabilir mi?
O devralan oluyor, değil Page<T>, ama Tkendisinden türetilen bir türü tarafından parametrelenmelidir sınırlandırılmış olmasından BasePage<T>.
Nedenini anlamak için, type parametresinin Tgerçekte nasıl kullanıldığına bakmanız gerekir . Bir miktar kazdıktan sonra, miras zincirini yükseltirken, bu sınıfa girersiniz:
( 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);
}
}
Görebildiğim kadarıyla, genel kısıtlamanın tek amacı, Createyöntemin mümkün olan en az soyut türü döndürmesini sağlamaktır.
Buna değip değmeyeceğinden emin değilim, ama belki de arkasında iyi bir sebep var, ya da sadece kolaylık sağlamak için olabilir, ya da arkasında çok fazla madde yoktur ve bu alçıdan kaçınmak için çok ayrıntılı bir yöntemdir (BTW, I Ben burada demek değil, sadece insanların bunu yaptığını söylüyorum).
Bunun, yansımayı engellemelerine izin vermediğini unutmayın - bu api.Pages, typeof(T).Nameonu elde typeIdeden ve contentService.Createyöntemi olarak ileten sayfaların deposudur ( buraya bakın ).