asp.net mvc-请解释为什么这种c扩展方法有效

本文关键字:扩展 方法 有效 为什么 net mvc- 解释 asp | 更新日期: 2023-09-27 18:00:33

我买了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());
    }
}

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

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

作者只传入了两个参数,HtmlHelper html丢失了,但它仍然有效。我不知道为什么,请帮忙,谢谢。

asp.net mvc-请解释为什么这种c扩展方法有效

扩展方法的第一个参数是它所调用的对象。(在您的示例中为Html)。

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

扩展方法与其他方法的不同之处在于它们是

  • 声明为静态
  • 第一个参数是调用它的对象
  • 第一个参数的前缀是this关键字

可以在此处找到进一步的讨论:http://msdn.microsoft.com/en-us/library/bb383977.aspx

由于第一个参数被定义为<thisType name>与编译器通常知道的构建方法相反,编译器会自动为您处理第一个参数,因此您只需要担心后面的参数(如果有的话)。