Suoni come un Extension Method.
Il simbolo @
consente al nome della variabile di essere lo stesso di una parola chiave C# - Tendo ad evitarli come la peste di persona.
Se si rimuove la parola chiave this
, non sarà più un metodo di estensione, ma solo un metodo statico. A seconda della sintassi del codice chiamante, non può più compilare, ad esempio:
public static class IntegerMethods
{
public static int Add(this int i, int value)
{
return i + value;
}
}
int i = 0;
// This is an "extension method" call, and will only compile against extension methods.
i = i.Add(2);
// This is a standard static method call.
i = IntegerMethods.Add(i, 2);
Il compilatore si limiterà a tradurre tutti "chiamate di metodo estensione" in metodo statico standard di chiamate in ogni caso, ma le chiamate di metodo estensione sarà ancora solo lavorare con metodi di estensione validi secondo la sintassi this type name
.
Alcune linee guida
Queste sono mie, ma trovo che siano utili.
- Discoverability di metodi di estensione può essere un problema, in modo da essere consapevoli dello spazio dei nomi si sceglie di contenerli in. Abbiamo molto utile roba sotto i namespace .NET quali
System.Collections
o qualsiasi altra cosa. Cose meno utili ma altrimenti "comuni" tendono ad andare sotto lo Extensions.<namespace of extended type>
in modo tale che la rilevabilità sia almeno coerente per convenzione.
- Provare a non estendere i tipi utilizzati di frequente in ambito ampio, non si desidera
MyFabulousExtensionMethod
visualizzato su object
in tutta l'app. Se hai a, vincola lo scope (namespace) a molto o ignora i metodi di estensione e usa direttamente una classe statica - questi non inquinano i metadati di tipo in IntelliSense.
- Nei metodi di estensione, "questo" può essere
null
(a causa del modo in cui vengono compilati in chiamate al metodo statico) quindi fare attenzione e non assumere che "questo" non sia nullo (dal lato chiamante questo sembra un metodo riuscito chiamare su un obiettivo nullo).
Questi sono facoltativi e non esaustivi, ma trovo che di solito rientrano nella bandiera del "buon" consiglio. YMMV.
fonte
2013-05-10 12:32:45
C# è molto bello grammatica, infatti, se lo si confronta con C++ –