Buscar este blog

martes, 23 de octubre de 2012

Agregar método extendido a un objeto (clase o control) en C#

Hoy veremos como agregar un método adicional a un clase o control que no son propios de nuestro código  por ejemplo podríamos agregar una extensión a la clase DataTable que permita convertir todos sus datos a un XML, o agregar una extensión a un GridView para poder exportar a Excel. Estos tipos de métodos son muy útiles para encapsular una funcionalidad común para un tipo de objeto en especifico.

Ejemplo:
Primero agregamos una clase nueva a nuestro proyecto "ListBoxExtension", esta clase tendrá todos los métodos extendidos del control ListBox.

public static class ListBoxExtension
    {
        public static string ConvertToXml(this GandA.Web.UI.Controls.ListBox listBox)
        {
            string xml = string.Empty;
            foreach (ListItem item in listBox.ControlListBox.Items)
            {
                xml = xml + "<Item><Value>" + item.Value + "</Value></Item>";
            }

            if (!string.IsNullOrEmpty(xml))
                xml = "<Items>" + xml + "</Items>";

            return xml;
        }
}

Como pueden observar, para decir que nuestro método sera un extensión recibe como parámetro el control anteponiendo la palabra "this".
Si queremos utilizar el método, lo haremos de la siguiente manera:

protected void btnGuardar_Click(object sender, EventArgs e)
{
     lstEstPaq.ConvertToXml();
}

Donde "lstEstPaq", es nuestro control ListBox, y "ConvertToXml" es nuestro extension. Podrán observar que este método sólo va a aparecer si se esta haciendo referencia a la clase ListBoxExtension, para ello agreguen su using.

using CLab.Utils.Extensions;

Donde "MiProyecto.Utils.Extensions" es mi namespace donde se encuentra mi clase ListBoxExtension.

Como pueden darse cuenta la extensión de métodos es algo muy sencillo de implementar y que nos ayuda a encapsular y agregar funcionalidades extras a clases o controles que no son parte de nuestro código.
Espero que esto les ayude, y cual quier duda preguntes

--------------------------------------------------------------
Lo que se puede imaginar... se puede programar