public interface IPagedList<T>
{
IEnumerable<T> PageResults { get; }
int CurrentPageIndex { get; }
int TotalRecordCount { get; }
int TotalPageCount { get; }
int PageSize { get; }
}
は、今私は、ページングコントロールが持つページング制御
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);
}
}
を作成したい、私はページングリストを露出させるため、以下のインタフェースを持っていると言いますT
(リストの実際の内容)には関心がありません。ページ数、現在のページ数などが必要です。PagedListPager
の一般的な理由は、IPagedList<T>
パラメータでコンパイルするためです。
これはコードのにおいですか?私は実質的に冗長なジェネリックを持つことに気を付けるべきですか?
このような場合、インターフェイスの非汎用バージョンを公開するための標準パターンはありますか?そのため、ページャでジェネリックタイプを削除できますか?
public class PagedListPager(IPagedList list)
編集私はまた、私はこの問題を解決してきた現在の方法を追加し、それが適切な解決策だかどうかについてコメントを招待しようと思いました
:
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
}
今では、非汎用クラス/関数にConcretePagedList<T>
を渡すことができます
'PagedListPager'はクラス宣言またはメソッド宣言ですか? –
@Greggよ、申し訳ありません、私はそれを編集します。 – fearofawhackplanet
私は両方のインターフェイスで定義されたプロパティを持っているのが好きではありません。たとえば、IPagedList.PageSize {get {return 8;}} IPageList .PageSize {get {return this.PageResults。あなたが2番目のインターフェイスを持つ唯一の理由は、厳密な型定義を提供することです。そのため、Marcの答えは、クラスが異なるプロパティで異なる結果を持つ能力を削除するようです。 –
MPavlak