Tra le numerosissime novità del .NET Framework 3.5 che sto sperimentando in questi giorni, oggi voglio segnalare gli Extension Methods. Come riportato qui:
The basic idea is that the set of methods available on an instance of a particular type is open to extension. In effect, we can add new methods to existing types.
Supponiamo di eseguire sempre la stessa operazione su un certo tipo di dati, ad esempio ottenere l'array di byte a partire dal contenuto di una stringa. Una soluzione tipicamente adottata fino ad oggi consiste nel definire una classe statica con il metodo che esegue l'operazione, quindi richiamarlo utilizzando qualcosa del tipo:
string message = "Messaggio";
byte[] buffer = Utils.GetBytes(message);
In una situazione del genere è possibile definire un Extension Method:
1 public static class Utils
2 {
3 public static byte[] GetBytes(this string str)
4 {
5 return Encoding.Default.GetBytes(str);
6 }
7 }
La parola chiave this (linea 3) indica che il metodo GetBytes è un'estensione della classe String. In pratica, la classe String viene arricchiata con un nuovo membro, che può essere richiamato come qualsiasi altro:
string message = "Messaggio";
byte[] buffer = message.GetBytes(); //Stesso risultato del primo esempio.
Anche l'IntelliSense di Visual Studio visualizzerà il nuovo metodo, segnalando che si tratta di un'estensione della classe. Gli Extension Methods sono supportati sia da C# sia da Visual Basic. Quest'ultimo linguaggio non supporta la parola chiave this, quindi per definire un Extension Method è necessario specificare l'attributo <Extension()> (contenuto nel namespace System.Runtime.CompilerServices.ExtensionAttribute) prima della dichiarazione del metodo. Le estensioni devono essere metodi statici contenuti in classi statiche.
Technorati Tags:
.NET,
Programming,
CS