2 Stimmen

Bitte erklären Sie, warum diese c#-Erweiterungsmethode funktioniert

Ich habe das Buch pro asp.net mvc2 framework gekauft. Ich bin auf Seite 122 hängen geblieben. Ich konnte nicht verstehen, warum es funktioniert.

Ich habe dem Autor bereits eine E-Mail geschickt, aber noch nichts zurückbekommen. Hier ist der Code, kann mir bitte jemand erklären, warum er funktioniert.

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

diese PageLinks-Hilfsmethode benötigt 3 Parameter, aber später im Buch, wenn der Autor sie aufruft,

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

Autor nur 2 Parameter übergeben, HtmlHelper html fehlt, aber es funktioniert. Ich konnte nicht herausfinden, warum, bitte helfen Sie, danke.

7voto

SLaks Punkte 832502

Der erste Parameter einer Erweiterungsmethode ist das Objekt, mit dem sie aufgerufen wird. ( Html in Ihrem Beispiel).

Sie können lesen mehr über Erweiterungsmethoden auf MSDN .

1voto

Erweiterungsmethoden unterscheiden sich von anderen Methoden dadurch, dass sie

  • Deklariert statisch
  • Der erste Parameter ist das Objekt, auf dem die Funktion aufgerufen wird
  • Dem ersten Parameter ist das Schlüsselwort this vorangestellt

Weitere Informationen finden Sie hier: http://msdn.microsoft.com/en-us/library/bb383977.aspx

0voto

The Evil Greebo Punkte 6826

Da der erste Parameter definiert ist als < ce Typname> im Gegensatz zu den üblichen weiß der Compiler es so zu bauen, dass der erste Parameter automatisch für Sie gehandhabt wird, und somit müssen Sie sich nur um die Parameter kümmern, wenn welche folgen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X