请解释为什么这个c#扩展方法有效

qin*_*126 2 c# asp.net-mvc asp.net-mvc-2

我买了pro asp.net mvc2框架书.我在第122页遇到了困难.我无法理解为什么会这样.

我已经通过电子邮件发送了作者,但还没有收到任何回复.这是代码,有人可以向我解释为什么它的工作原理.

    public static class PagingHelpers
{
    public static MvcHtmlString PageLinks(this HtmlHelper html, PagingInfo pagingInfo, Func<int, string> pageUrl)
    {
        StringBuilder result = new StringBuilder();

        for (int i = 1; i <= pagingInfo.TotalPages; i++)
        {
            TagBuilder tag = new TagBuilder("a");
            tag.MergeAttribute("href", pageUrl(i));

            tag.InnerHtml = i.ToString();

            if (i == pagingInfo.CurrentPage)
                tag.AddCssClass("selected");

            result.AppendLine(tag.ToString());
        }

        return MvcHtmlString.Create(result.ToString());
    }
}
Run Code Online (Sandbox Code Playgroud)

这个PageLinks辅助方法需要3个参数,但是在本书后面,当作者调用它时,

<%: Html.PageLinks(
      new PagingInfo { CurrentPage = 2, TotalItems = 28, ItemsPerPage = 10 },
      i => Url.Action("List", new{ page = i})
) %>
Run Code Online (Sandbox Code Playgroud)

作者只传递了2个参数,HtmlHelper html丢失了,但是它有效.我无法弄清楚原因,请帮助,谢谢.

SLa*_*aks 7

扩展方法的第一个参数是它被调用的对象.(Html在你的例子中).

您可以在MSDN上阅读有关扩展方法的更多信息.