2011-06-27 4 views
2

私はpro asp.net mvc2 framework bookを購入しました。私は122ページに固執しました。私はそれがなぜ機能するのか理解できませんでした。このC#拡張メソッドが動作する理由を説明してください

私は既に著者に電子メールを送っていますが、まだ何も戻っていません。ここにコードがあります、誰かが私にそれがなぜ機能するのか説明してください。

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}) 
) %> 

著者はわずか2つのパラメータに渡された、のHtmlHelper HTMLが欠落しているが、それはsitll動作します。なぜ、助けてください、ありがとう、私は理解できませんでした。

答えて

7

拡張メソッドの最初のパラメータは、それが呼び出されたオブジェクトです。 (例ではHtml)。

more about extension methods on MSDNを読むことができます。

1

拡張メソッドは、彼らが最初のパラメータは、それが最初のパラメータは、このキーワード によって付けられ

  • と呼ばれているオブジェクトである
  • 静的宣言

    • であるという点で他の方法とは異なります

    さらなる議論は、ここに見つけることができる。http://msdn.microsoft.com/en-us/library/bb383977.aspx

  • 0

    最初のパラメータは< タイプ名>と定義されているので、コンパイラは最初のパラメータが自動的に処理されるようにコンパイラを構築することを知っているため、これらのパラメータについては心配する必要がありますそれに続くものがあれば。

    関連する問題