2013-02-23 18 views
16

Ho notato che "questo" oggetto davanti al primo parametro nel metodo BeginForm non sembra essere accettato come parametro. Sembra che in vero i metodi BeginForm funzioni come:Cosa significa "questa" parola chiave in un parametro di metodo?

BeginForm(string actionName, string controllerName); 

omettendo il primo parametro. Ma in realtà riceve quel primo parametro in qualche modo in un modo nascosto. Puoi spiegarmi come funziona questa struttura. In realtà sto esplorando MVC 4 Internet Sample. Grazie.

+11

Si tratta di un metodo di estensione - http://msdn.microsoft.com/en-us/library/vstudio /bb383977.aspx – aush

+0

Grazie, passerò attraverso questo. – INgeek

risposta

26

Ecco come funzionano i metodi di estensione in C#. La funzione Metodi di estensione consente di estendere i tipi esistenti con metodi personalizzati. Il this [TypeName] parola chiave nel contesto dei parametri del metodo è la type che si desidera estendere con i vostri metodi personalizzati, il this viene utilizzato come prefisso, nel tuo caso, HtmlHelper è la type di estendere e BeginForm è il metodo che dovrebbe estenderlo .

Date un'occhiata a questo semplice metodo di estensione per il tipo di string:

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

si può facilmente utilizzare su string oggetto:

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

Riferimenti:

+0

questa è una spiegazione molto accurata, grazie – INgeek

+0

@INgeeg Prego! –

+0

@YairNevet Il metodo deve essere dichiarato come 'statico' affinché funzioni? – thatWiseGuy

2

Metodi di estensione:

A "bullone sul" modo per estendere un tipo esistente. Ti permettono di estendere un tipo esistente con nuove funzionalità, senza dover sottoclasse o ricompilare il vecchio tipo. Ad esempio, potresti voler sapere se una determinata stringa era o meno un numero. Oppure si potrebbe desiderare di avere la funzionalità Show() Hide() in ASP.net WebForms per i controlli.

Per esempio:

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: Per informazioni futher si può vedere la documentazione MSDN in: http://msdn.microsoft.com/en-us/library/vstudio/bb383977.aspx che è stato gentilmente collegata da @aush.

Mi è piaciuto leggere "C# in profondità" per quanto riguarda i metodi di estensione. C'è un estratto disponibile qui: http://my.safaribooksonline.com/book/programming/csharp/9781935182474/extension-methods/ch10lev1sec3

Puoi ovviamente acquistare il libro online oppure puoi semplicemente fare delle ricerche su come funziona tutto sotto il cofano usando Google.

+3

un link non dovrebbe essere la tua risposta.Si prega di fornire alcuni dettagli in modo che la vostra risposta sarà autonoma – psubsee2003

+5

Soprattutto non un collegamento a contenuto che non è pubblico, o non libero. –

+0

@JohnSaunders buon punto, non ho nemmeno fatto clic su – psubsee2003

Problemi correlati