分页构造函数

wrost 2012-10-11 09:12:37
我在看一个开源分页。 在下边第一段代码是扩展方法,最后一行用了构造函数;第二个是构造函数

问题:对构造函数不太清楚,只看到定义了一些int 属性, 没看到List<T>对象; AddRange(items) 这是一个List的方法,对象都没有,怎么直接就写AddRange(items)



/*
ASP.NET MvcPager 分页组件
Copyright:2009-2011 陕西省延安市吴起县 杨涛\Webdiyer (http://www.webdiyer.com)
Source code released under Ms-PL license
*/

using System.Linq;

namespace Webdiyer.WebControls.Mvc
{
public static class PageLinqExtensions
{
public static PagedList<T> ToPagedList<T>
(
this IQueryable<T> allItems,
int pageIndex,
int pageSize
)
{
if (pageIndex < 1)
pageIndex = 1;
var itemIndex = (pageIndex-1) * pageSize;
var pageOfItems = allItems.Skip(itemIndex).Take(pageSize);
var totalItemCount = allItems.Count();
return new PagedList<T>(pageOfItems, pageIndex, pageSize, totalItemCount);
}
}
}



/*
ASP.NET MvcPager 分页组件
Copyright:2009-2011 陕西省延安市吴起县 杨涛\Webdiyer (http://www.webdiyer.com)
Source code released under Ms-PL license
*/
using System;
using System.Collections.Generic;

namespace Webdiyer.WebControls.Mvc
{
public class PagedList<T> : List<T>,IPagedList
{

public PagedList(IEnumerable<T> items, int pageIndex, int pageSize, int totalItemCount)
{
AddRange(items);
TotalItemCount = totalItemCount;
CurrentPageIndex = pageIndex;
PageSize = pageSize;
}

public int CurrentPageIndex { get; set; }
public int PageSize { get; set; }
public int TotalItemCount { get; set; }
public int TotalPageCount { get { return (int)Math.Ceiling(TotalItemCount / (double)PageSize); } }
public int StartRecordIndex { get { return (CurrentPageIndex - 1) * PageSize + 1; } }
public int EndRecordIndex { get { return TotalItemCount > CurrentPageIndex * PageSize ? CurrentPageIndex * PageSize : TotalItemCount; } }
}
}













...全文
124 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wrost 2012-10-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

对,事实上,也只有这一个对象,或许你会感觉继承的对象中是不是还“嵌套”着一个基类的对象,实际上是没有的。就好像人就是人,人的肚子里没有一个叫哺乳动物的东西。
[/Quote]

谢谢你的耐心讲解 :)
threenewbee 2012-10-11
  • 打赏
  • 举报
回复
对,事实上,也只有这一个对象,或许你会感觉继承的对象中是不是还“嵌套”着一个基类的对象,实际上是没有的。就好像人就是人,人的肚子里没有一个叫哺乳动物的东西。
wrost 2012-10-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

this.AddRange(items)
可以简写成
AddRange(items)

除非你的基类和本类有两个同名同参但是完全不同的方法(没有使用virtual/override定义的方法)
[/Quote]


this.AddRange(items)中的this是表示 PagedList<T> 构造出来的实例对象本身,对吧?




threenewbee 2012-10-11
  • 打赏
  • 举报
回复
this.AddRange(items)
可以简写成
AddRange(items)

除非你的基类和本类有两个同名同参但是完全不同的方法(没有使用virtual/override定义的方法)
wrost 2012-10-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

因为这个类(PagedList<T>)从List<T>继承,而List<T>有AddRange方法。

有问题也可以直接去问论坛的Webdiyer(陕北吴旗娃),这个就是他写的。
[/Quote]

“从List<T>继承,而List<T>有AddRange方法。”这个我知道

我的意思是:是不是要加一个 this.AddRange(items),表示成构造出来的 对象..AddRange(items),主要是表达方式上的疑惑?
EnForGrass 2012-10-11
  • 打赏
  • 举报
回复
public class PagedList<T> : List<T>,IPagedList


继承了List<T>对象
threenewbee 2012-10-11
  • 打赏
  • 举报
回复
因为这个类(PagedList<T>)从List<T>继承,而List<T>有AddRange方法。

有问题也可以直接去问论坛的Webdiyer(陕北吴旗娃),这个就是他写的。

62,131

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧