【发布时间】:2016-10-31 09:44:02
【问题描述】:
我是 C# 新手,我试图找到一种将通用委托传递给构造函数的方法。
调用show端点时,如果有分页,端点应该返回一个Page实例。创建 Page 实例时,应将委托方法作为构造函数参数之一传递。 ShowsEndpoints 将托管许多端点,其中许多端点使用分页。我只想使用一个类来处理所有端点。
public partial class ShowsEndpoints : Endpoint
{
public Func<Task<IEnumerable<object>>> FetchPopularShowsAsyncDelegate;
public Func<Task<IEnumerable<object>>> FetchTrendingShowsAsyncDelegate;
public Func<Task<IEnumerable<object>>> FetchMostWatchedShowsAsyncDelegate;
public async Task<IEnumerable<object>> FetchPopularShowsAsync(int page = 1, int limit = 20)
{
return await SendAsync(new PopularShowsRequest(page, limit));
}
public async Task<IEnumerable<object>> FetchTrendingShowsAsync(int page = 1, int limit = 20)
{
return await SendAsync(new TrendingShowsRequest(page, limit));
}
public async Task<IEnumerable<object>> FetchMostWatchedShowsAsync(int page = 1, int limit = 20)
{
return await SendAsync(new MostWatchedShowsRequest(page, limit));
}
}
如果有下一页,将调用委托来获取下一页的页面类。
public class Page<TItem, TDelegate>
{
private TDelegate _delegateCommand;
public int CurrentPage { get; }
public int TotalPages { get; }
public int PageItemsCount { get; }
public int TotalItemsCount { get; }
public IEnumerable<TItem> Items { get; }
public Page(int page, int totalPages, int itemsCount, int totalItemsCount, IEnumerable<TItem> items, TDelegate delegateCommand)
{
CurrentPage = page;
TotalPages = totalPages;
PageItemsCount = itemsCount;
TotalItemsCount = totalItemsCount;
Items = items;
_delegateCommand = delegateCommand;
}
public bool HasNext()
{
return CurrentPage <= TotalPages;
}
public bool HasPrevious()
{
return CurrentPage >= 1;
}
public Page<TItem, TDelegate> Next()
{
// call _delegateCommand to fetch the next page items
}
public Page<TItem, TDelegate> Previous()
{
// call _delegateCommand to fetch the previous page items
}
}
有可能吗?
谢谢。
编辑
为了更好地理解我的问题,我更新了我的课程代码。我有 3 个端点与它们的代表相关联,我希望 Page 类使用相同代码的这 3 个代表中的任何一个,以避免重复。所以_delegateCommand 可以是FetchPopularShowsAsyncDelegate、FetchTrendingShowsAsyncDelegate 或FetchMostWatchedShowsAsyncDelegate。
【问题讨论】:
-
是的,但是你应该放置一个 where 子句来限制/指定这个 TDelegate 应该是 Func 以便你可以在你的类中正确使用它... [msdn.microsoft.com/en-us/library/bb384067(v=vs.100).aspx]
标签: c# generics constructor delegates