Blogger news

19:57
0
En esta tercera (y última) entrega de los métodos anónimos veremos un ejemplo en C#, utilizando Windows Form, dónde se actualizará una barra de progreso.
Ésta indica el estado interno de una clase interna (BO_Object.cs). Dentro de esta clase se realiza un proceso que modifica repetidas veces el valor de una variable. Para avisar al usuario acerca del progreso, esta clase otorga un mecanismo basado en delegados, a fin de que los clientes puedan suscribirse al evento en cuestion.
Metodos Anonimos

BO_Object.cs using System;

namespace ProgressBar
{
    delegate void z_delTipoDelegado();
    class BO_Object
    {
        //Declaracion de las propiedades.
        static protected int z_varointValor = 0;
        static public int z_prouintValor
        {
            get { return z_varointValor; }
            set { z_varointValor = value; }
        }
        //Este metodo incrementa el valor de la propiedad z_prouintValor
        //a traves de un delegado implementando un metodo anonimo.
        //El tipo devuelto por el metodo anonimo es inferior
        //de la firma del delegado
        static protected void z_metaCambiarValor()
        {
            if (z_varointValor == 100)
                z_varointValor = 0;
            z_varointValor++;
        }
        //Este metodo simula un proceso que ocurre dentro de la clase
        // y cambia el estado interno de la misma, representado por el
        //valor de la variable protegida z_varointValor.
        static public void z_metaProcesar(z_delTipoDelegado z_parcioDelegado)
        {
            for (int i = 0; i < 100; i++)
            {
                z_metaCambiarValor();
                z_parcioDelegado(); //envia aviso
                for (int j = 0; j < 10000000; j++) ; // delay
            }
        }
    }
}


Esta clase utiliza delegados como método de aviso. Asi dentro del método z_metaProcesar se cambia el valor llamando al método z_metaCambiarValor y avisa mediante z_parcioDelegado.

A continuación se muestra el código agregado a cada uno de los manejadores de eventos de los controles. public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void z_metaAviso()
        {
            z_pgbProgress.Value = BO_Object.z_prouintValor;
        }

        private void z_btnInicio_Click(object sender, EventArgs e)
        {
            //Instancia del delagado
            z_delTipoDelegado z_varocioDelegado = new z_delTipoDelegado(z_metaAviso);
            //Actualiza el ProgressBar utilizando delegados con Metodos NOMBRADOS.
            //Dentro del metodo z_metaProcesar se llama repetidas veces al metodo
            //z_metaAviso.
            //De esta manera, se debe instanciar un delegado, pasarlo como parametro
            //de un metodo y escribr el metodo.
            BO_Object.z_metaProcesar(z_varocioDelegado);
        }

        private void z_btnAnonimo_Click(object sender, EventArgs e)
        {
            //Este metodo realilza lo mismo el mismo trabajo que el codigo z_btnInicio_Click
            //Aqui no es necesario instanciar un delegado, tampoco es necesario crear un metodo
            //para proveer la funcionalidad deseada.
            BO_Object.z_metaProcesar(delegate { z_pgbProgress.Value = BO_Object.z_prouintValor; });
        }

        private void z_btnSalir_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void z_btnRestablecer_Click(object sender, EventArgs e)
        {
            BO_Object.z_prouintValor = 0;
            z_pgbProgress.Value = 0;
        }
    }



Los delegados proveen de metodos y operadores para agregar o remover métodos. Son utilizados frecuentemente para eventos, funciones callback y llamadas asincrónicas. En ocaciones, uno está forzado a crear clases o métodos sólo para adr soporte a delegados, en cuyo caso no existe la necesidad o el concepto de múltiples targets. Entonces, el código suele ser sencillo y corto. Tales características definen código que puede ser implementado con el uso de métodos anónimos.

Espero que estos ejemplo les sirvan para mejorar y enriqueces de manera notable su código.

Aqui les dejo el codigo.Click Aqui

Ailas.....

0 comentarios:

Publicar un comentario