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 T
kendisinden türetilen bir türü tarafından parametrelenmelidir sınırlandırılmış olmasından BasePage<T>
.
Nedenini anlamak için, type parametresinin T
gerç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ı, Create
yö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).Name
onu elde typeId
eden ve contentService.Create
yöntemi olarak ileten sayfaların deposudur ( buraya bakın ).