相关疑难解决方法(0)

用于公开通用接口的非泛型版本的模式

假设我有以下界面来公开分页列表

public interface IPagedList<T>
{
    IEnumerable<T> PageResults { get; }
    int CurrentPageIndex { get; }
    int TotalRecordCount { get; }
    int TotalPageCount { get; }        
    int PageSize { get; }
}   
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个分页控件

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

分页控件不感兴趣T(列表的实际内容).它只需要页面数,当前页面等.所以唯一的原因PagedListPager是泛型是这样它将使用通用IPagedList<T>参数进行编译.

这是代码味吗?我是否应该关心我有效地使用冗余通用?

在这种情况下是否有标准模式用于公开接口的其他非泛型版本,因此我可以删除寻呼机上的泛型类型?

public class PagedListPager(IPagedList list)
Run Code Online (Sandbox Code Playgroud)

编辑

我想我也会添加当前解决这个问题的方法并邀请评论是否是一个合适的解决方案:

public interface IPagedList // non-generic …
Run Code Online (Sandbox Code Playgroud)

c# generics design-patterns interface open-generics

26
推荐指数
3
解决办法
8323
查看次数

标签 统计

c# ×1

design-patterns ×1

generics ×1

interface ×1

open-generics ×1