пожалуйста, объясните, почему этот метод расширения c # работает - PullRequest
2 голосов
/ 27 июня 2011

Я купил pro asp.net mvc2 framework book. Я застрял на странице 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})
) %>

Автор только передал 2 параметра, html HtmlHelper отсутствует, но все равно работает. Я не могу понять, почему, пожалуйста, помогите, спасибо.

Ответы [ 3 ]

7 голосов
/ 27 июня 2011

Первым параметром метода расширения является объект, к которому он вызывается.(Html в вашем примере).

Вы можете прочитать подробнее о методах расширения в MSDN .

1 голос
/ 27 июня 2011

Методы расширения отличаются от других методов тем, что они

  • Объявлен статический
  • Первый параметр - это объект, для которого он называется
  • Первый параметр имеет префикс этого ключевого слова

Дальнейшее обсуждение можно найти здесь: http://msdn.microsoft.com/en-us/library/bb383977.aspx

0 голосов
/ 27 июня 2011

Поскольку первый параметр определен как <<strong> this Имя типа>, в отличие от обычного, компилятор знает, что он будет построен таким образом, что первый параметр автоматически обрабатывается для вас, и, таким образом, вы тольконужно беспокоиться об этих параметрах, если они есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...