using System; using System.Text; using System.Timers; using System.Runtime.CompilerServices; namespace ExtensionMethods { static class Program { // DisplayInterval é um ExtensionMethod que estende a classe Timer static void DisplayInterval(this Timer t) { Console.WriteLine(t.Interval.ToString()); } static void Main(string[] args) { System.Timers.Timer t = new System.Timers.Timer(2000); // Chama o método DisplayInterval normalmente Program.DisplayInterval(t); // Chama o método DisplayInterval estendido t.DisplayInterval(); // Espera uma ação do usuário Console.ReadLine(); } } } // Cria o namespace CompilerServices com a classe ExtensionAttibute // que existe somente em System.Core.dll no .Net Framework 3.5 namespace System.Runtime.CompilerServices { public class ExtensionAttribute : Attribute { } }
No código acima criamos o namespace System.Runtime.CompilerServices com a classe ExtensionAttribute que herda da classe Attribute, isso fará com que o código da aplicação imite o código do assembly System.Core. Isto já será o suficiente para usarmos os Extension Methods em uma aplicação com o Framework 2.0. No código acima temos o método DisplayInterval que é um Extension Method que estende a classe System.Timers.Timer.
Como uma das principais caracteristicas dos Extension Methods é estender as funcionalidades das classes sem estar mechendo diretamente no código fonte original nada melhor do que poder usá-lo em aplicações mais antigas, logo, aplicações que ainda usam o Framework 2.0 ao invés do 3.5
Para finalizar, vale resaltar que essa técnica não pode ser aplicada em aplicações ASP.NET que são compiladas no Framework 2.0, pois os Web servers ao efetuarem o deploy não entendem os Extension Methods.
Até a próxima...
tem tempo hein