Một số có thể giúp tôi hiểu tại sao lớp học được kế thừa từ một cơ sở cùng loại?
Không phải, nó được thừa hưởng từ Page<T>
, nhưng T
bản thân nó bị hạn chế để được tham số hóa bởi một loại có nguồn gốc từ BasePage<T>
.
Để suy luận tại sao, bạn phải xem cách tham số loại T
thực sự được sử dụng. Sau khi đào bới, khi bạn tiến lên chuỗi thừa kế, bạn sẽ đến lớp này:
( 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);
}
}
Theo như tôi có thể thấy, mục đích duy nhất cho ràng buộc chung là để đảm bảo rằng Create
phương thức trả về loại trừu tượng nhất có thể.
Dù không chắc là nó có đáng hay không, nhưng có lẽ có lý do chính đáng nào đó đằng sau nó, hoặc có thể chỉ vì sự thuận tiện, hoặc có thể không có quá nhiều chất đằng sau nó và đó chỉ là một cách quá phức tạp để tránh diễn viên (BTW, I Tôi không ngụ ý đó là trường hợp ở đây, tôi chỉ nói rằng mọi người đôi khi làm điều đó).
Lưu ý rằng điều này không cho phép họ để tránh phản chiếu - sự api.Pages
là một kho lưu trữ các trang mà có được typeof(T).Name
, và vượt qua nó như là typeId
để các contentService.Create
phương pháp ( xem tại đây ).