2013-02-23 19 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); 
... 
    } 
} 

Zauważyłem, że "ten" obiekt przed pierwszym parametrem w metodzie BeginForm nie wydaje się być akceptowany jako parametr. Wygląda w prawdziwych metod BeginForm funkcje jak:Co oznacza "to" słowo kluczowe w parametrze metody?

BeginForm(string actionName, string controllerName); 

pomijając pierwszy parametr. Ale tak naprawdę otrzymuje ten pierwszy parametr w jakiś ukryty sposób. Proszę wyjaśnić mi, jak działa ta struktura. W rzeczywistości badam próbkę Internetu MVC 4. Dziękuję.

+11

to metodę rozszerzenia - http://msdn.microsoft.com/en-us/library/vstudio /bb383977.aspx – aush

+0

Dziękuję, przejdę przez to. – INgeek

Odpowiedz

26

Tak działają metody rozszerzeń w języku C#. Funkcja rozszerzeń umożliwiająca rozszerzenie istniejących typów za pomocą niestandardowych metod. this [TypeName] kluczowe w kontekście parametrów metody jest to type że chcesz przedłużyć swój metod niestandardowych The this służy jako przedrostek, w danym przypadku, HtmlHelper jest type rozszerzyć i BeginForm jest metodą, która powinna go przedłużyć .

Spójrz na to prosta metoda przedłużeniu dla typu string:

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

można łatwo używać go na string obiektu:

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

Referencje:

+0

to bardzo miłe wyjaśnienie, dziękuję – INgeek

+0

@INgeeg Nie ma za co! –

+0

@YairNevet Czy metoda musi być zadeklarowana jako 'static', aby to zadziałało? – thatWiseGuy

2

Extension Methods:

A "rygiel" na drodze do rozszerzenia istniejącego typu. Pozwalają one rozszerzyć istniejący typ o nowe funkcje, bez konieczności podklasy lub rekompilacji starego typu. Na przykład możesz chcieć wiedzieć, czy dany ciąg był liczbą, czy nie. Lub możesz chcieć mieć funkcję Show() Hide() w WebForms ASP.net dla formantów.

Dla przykładu:

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: w celu uzyskania dalszych informacji można zobaczyć w dokumentacji MSDN pod adresem: http://msdn.microsoft.com/en-us/library/vstudio/bb383977.aspx którą uprzejmie połączonych @aush.

Podobało mi się czytanie "C# In Depth" w odniesieniu do metod rozszerzenia. Dostępny jest tutaj wycinek: http://my.safaribooksonline.com/book/programming/csharp/9781935182474/extension-methods/ch10lev1sec3

Możesz oczywiście kupić książkę przez Internet lub po prostu sprawdzić, jak to wszystko działa pod maską za pomocą Google.

+3

link nie powinien być Twoją odpowiedzią.Podaj szczegółowe informacje, aby Twoja odpowiedź była samodzielna. – psubsee2003

+5

W szczególności nie jest to link do treści, która nie jest publiczna lub nie jest bezpłatna. –

+0

@JohnSaunders dobry punkt, nawet nie kliknąłem – psubsee2003

Powiązane problemy