Extension method con Visual Studio 2008
Gli extension method sono una delle novità puramente sintattiche del .NET Framework 3.5. Mi piace chiamarle sintatticamente perchè tecnicamente parlando è possibile ottenere lo stesso risultato con le vecchie versioni del framework. Facendola breve, utilizzando gli extension method è possibile “estendere” un tipo, dotandolo di uno o più metodi, senza creare nuovi tipi, senza la necessità di mettere mano a codice sorgente che magari non avete e – in fin dei conti – senza modificare il tipo originale. Maggiori dettagli su questa pagina di MSDN.
Supponiamo di aver definito un tipo Holiday come segue:
public class Holiday { public string Name { get; set; } public DateTime When { get; set; } }
La classe Holiday espone due proprietà Name e When. Implicitamente il compilatore crea un costruttore parameter-less. Ora: supponiamo di voler esporre un metodo IsPassed(), che ci dice se una certa festa è già passata nell’anno in corso. Se avessi il sorgente della classe, non avremmo problemi: si crea il metodo IsPassed che ritorna bool e siamo a posto. Supponiamo però di non avere il codice sorgente, oppure di non poter estendere la classe Holiday perchè è sealed o per chissà quale motivo. In una situazione di questo tipo, l’unica possibilità che avete è definire un extension method per il tipo Holiday. Guardate il seguente codice:
public static class HolidayExtensionMethod { public static bool IsPassed(this Holiday holiday) { return holiday.Name.Length > 0; } }
E’ una classe statica HolidayExtensionMethod, che espone un metodo pubblico IsPassed che prende in input un’istanza di Holiday. Notare la keyword this fra i parametri di input. Questa è la definizione di un extension method. L’utilizzo è banalissimo: l’Intellisense ci aiuta, perchè il metodo IsPassed() viene visto come se fosse esposto dal tipo Holiday.
static void Main(string[] args) { Holiday h = new Holiday(); h.Name = "Natale"; h.When = new DateTime(2007, 12, 25); bool isPassed = h.IsPassed(); }
Tutto qua.
Technorati Tags: .NET Framework Programming visualstudio