public interface IPagedList<T>
{
IEnumerable<T> PageResults { get; }
int CurrentPageIndex { get; }
int TotalRecordCount { get; }
int TotalPageCount { get; }
int PageSize { get; }
}
Şimdi çağrı kontrolü olan bir çağrı kontrolünü
public class PagedListPager<T>
{
public PagedListPager<T>(IPagedList<T> list)
{
_list = list;
}
public void RenderPager()
{
for (int i = 1; i < list.TotalPageCount; i++)
RenderLink(i);
}
}
oluşturmak istiyorum ben sayfalamalı liste sergilemek için aşağıdaki arayüze sahip Say T
numaralı telefona ilgi gösterilmiyor (listenin gerçek içeriği). Sadece sayfa sayısı, geçerli sayfa vb. Gerektirir. Yani PagedListPager
'un tek nedeni jeneriktir, böylece jenerik IPagedList<T>
paramater ile derlenecektir.
Bu bir kod kokusu mu? Olumlu bir genel olarak etkili olduğumu umursamıyorum?
Arabirimin genel olmayan bir sürümünü açığa çıkarmak için böyle bir durumda standart bir desen var mı, bu nedenle, genel tipini çağrı cihazında kaldırabilirim?
public class PagedListPager(IPagedList list)
Düzenleme ben de bu sorunu çözdük akım yolu ekleyebilir ve uygun bir çözüm olmadığı konusunda bir yorum davet düşündüm
:
public interface IPagedList // non-generic version
{
IEnumerable<object> PageResults { get; }
int CurrentPageIndex { get; }
int TotalRecordCount { get; }
int TotalPageCount { get; }
int PageSize { get; }
}
public class ConcretePagedList<T> : IPagedList<T>, IPagedList
{
#region IPagedList<T> Members
public IEnumerable<T> PageResults { get; set; }
public int CurrentPageIndex { get; set; }
public int TotalRecordCount { get; set; }
public int PageSize { get; set; }
#endregion
#region IPagedList Members
IEnumerable<object> IPagedList.PageResults
{
get { return PageResults.Cast<object>(); }
}
#endregion
}
Şimdi, genel olmayan sınıflara/işlevlere geçebilirim
PagedListPager 'bir sınıf veya yöntem beyanı mıdır? –
@Gregg oops üzgünüm bunu değiştireceğim. – fearofawhackplanet
Farklı arabirimler yapmak için bunları açıkça uygulayabileceğiniz gibi, her iki arabirimde de tanımlanmış özellikleri kullanmaktan hoşlanmıyorum. Örneğin, IPagedList.PageSize {get {return 8;}} IPageList .PageSize {get {return this.PageResults.Count();}} İkinci arayüze sahip olmanızın tek sebebi güçlü yazım sağlamaktır, bu yüzden Marc'ın cevabı, sınıfın farklı olmaması gereken özellikler üzerinde farklı sonuçlar elde etme yeteneğini ortadan kaldırıyor gibi görünmektedir. –
MPavlak