2013-02-23 20 views
16
namespace System.Web.Mvc.Html 
{ 
    // Summary: 
    //  Represents support for HTML in an application. 
    public static class FormExtensions 
    { 
     public static MvcForm BeginForm(this HtmlHelper htmlHelper, string actionName, string controllerName); 
... 
    } 
} 

Ich habe festgestellt, dass 'dieses' Objekt vor dem ersten Parameter in BeginForm-Methode scheint nicht als Parameter akzeptiert werden. Sieht aus wie in echten BeginForm-Methoden funktioniert wie:Was bedeutet dieses Schlüsselwort in einem Methodenparameter?

den ersten Parameter weglassen. Aber es empfängt diesen ersten Parameter irgendwie auf versteckte Weise. Können Sie mir bitte erklären, wie diese Struktur funktioniert. Ich erkunde MVC 4 Internet Sample. Danke.

+11

Dies ist eine Erweiterung Methode - http://msdn.microsoft.com/en-us/library/vstudio /bb383977.aspx – aush

+0

Danke, ich werde das durchgehen. – INgeek

Antwort

26

So funktioniert die Erweiterungsmethode in C#. Die Erweiterungsmethoden-Funktion, mit der Sie vorhandene Typen mit benutzerdefinierten Methoden erweitern können. Das this [TypeName] Schlüsselwort im Rahmen der Methodenparameter ist die type, die Sie mit Ihrem eigenen Methoden erweitern möchten, wird die this als Präfix verwendet wird, in Ihrem Fall ist HtmlHelper die type zu erweitern und BeginForm ist die Methode, die sie verlängern sollte .

für die string Art einen Blick auf diese einfache Erweiterung Methode Nehmen:

public static bool BiggerThan(this string theString, int minChars) 
{ 
    return (theString.Length > minChars); 
} 

Sie können es leicht auf string Objekt verwenden:

var isBigger = "my string is bigger than 20 chars?".BiggerThan(20); 

Referenzen:

+0

das ist sehr nette Erklärung, danke – INgeek

+0

@INgeeg Gern geschehen! –

+0

@YairNevet Muss die Methode als statisch deklariert werden, damit dies funktioniert? – thatWiseGuy

2

Erweiterungsmethoden:

A "Schraube auf" Weise eine bestehende Art zu erweitern. Sie ermöglichen es Ihnen, einen vorhandenen Typ mit neuen Funktionen zu erweitern, ohne den alten Typ neu unterteilen oder neu kompilieren zu müssen. Zum Beispiel möchten Sie vielleicht wissen, ob eine bestimmte Zeichenfolge eine Nummer war oder nicht. Oder Sie möchten die Funktion Show() Hide() in ASP.net WebForms für Steuerelemente verwenden.

Beispiel:

public static class MyExtensionMethods 
{ 
    public static void Show(this Control subject) 
    { 
     subject.Visible = true; 
    } 
    public static bool IsNumeric(this string s) 
    { 
     float output; 
     return float.TryParse(s, out output); 
    } 
} 

Edit: Für weitere Informationen, die Sie in der MSDN-Dokumentation sehen: http://msdn.microsoft.com/en-us/library/vstudio/bb383977.aspx, die freundlicherweise von @aush verlinkt.

Ich genoss es, "C# In Depth" in Bezug auf Extension-Methoden zu lesen. Es gibt einen Auszug hier: http://my.safaribooksonline.com/book/programming/csharp/9781935182474/extension-methods/ch10lev1sec3

Sie können das Buch natürlich online kaufen oder Sie können nur eine Untersuchung durchführen, wie alles unter der Haube mit Google funktioniert.

+3

ein Link sollte nicht deine Antwort sein.Bitte geben Sie einige Details an, damit Ihre Antwort für sich alleine steht. – psubsee2003

+5

Vor allem kein Link zu Inhalten, die nicht öffentlich oder nicht kostenlos sind. –

+0

@JohnSaunders guten Punkt, ich habe nicht einmal geklickt – psubsee2003