none
alguien me explica d emanera sencilla los Delegados..

    Question

  • hola que tal , aqui ando de nuevo xD.

     

    Estube leyendo este link de MSDN: http://msdn.microsoft.com/es-es/library/ms173172%28v=VS.80%29.aspx

    y creo no entenderlo del todo.

    corrijanme mi definicion de delegado si estoy mal por favor:

    Un delegado, sirve como para poder usar un Metodo,  y puede heredar sus propiedades y convertirce en un objeto. (tambien dice que debe tener su firma, y con firma entiendo que quiere decir     Firma= (Contenido de los parentecis del metodo)    )

    Y por lo que veo, puede agregar o restar metodos con los operadores "-"  ,  "+".

     

    pero sigo algo inconcluso.. , por que tambien fui a leer el libro de Anaya-La biblia de C# , y el codigo que pasan tiene un error( lo copie a mano y lo vi como minimo 10 veces, y el codigo es exacto al del libro, pero tiene un error en la linea 20.

    es este el codigo :

     

     

    using System;
    
    public delegate void EvenNumberHandler(int Number);
    
    class Counter
    {
     public event EvenNumberHandler OnEvenNumber;
    
     public Counter()
     {
      OnEvenNumber = null;
     }
    
     public void CountTo100()
     {
      int CurrentNumber;
    
      for (CurrentNumber = 0; CurrentNumber <= 100; CurrentNumber++)
      {
       if (CurrentNumber 2 == 0) //Aqui esta el primer error
       {
        if( OnEvenNumber != null)
        {
         OnEvenNumber(CurrentNumber);
        }
       }
      }
     }
    }
    
    class EvenNumberHandlerClass
    {
     public void EvenNumberFound(int EvenNumber)
     {
      Console.WriteLine(EvenNumber);
     }
    
    }
    
    class MainClass
    {
     public static void Main()
     {
      Counter MyCounter = new Counter();
      EvenNumberHandlerClass MyEvenNumberHandlerClass = new EvenNumberHandlerClass();
      MyCounter.OnEvenNumber += new EvenNumberHandler(MyEvenNumberHandlerClass.EvenNumberFound);
      MyCounter.CountTo100; //aqui el segundo
     }
    }
    

     

    Si alguno me da una definicion mas humana, y basica, se lo agradeceria, por que estoy a medias con los delegados sinceramente, y esta parte le veo mucha importancia y no creo que se deba aprender a medias.

     

    muchas gracias por leer mi post, se agradece tu colaboracion ^_^


    Sabio es aquel que abre su cabeza y siempre agrega nuevos conocimientos, no aquel que se cree saberlo todo
    Tuesday, August 30, 2011 7:30 PM

Answers

  • esta linea del msdn lo resumen perfectamente

    Un delegado es un tipo de objeto que encapsula un método de forma segura, similar a un puntero a función de C y C++

    como veras si conoces algo de c o c++ piensa al delegado como un puntero a una funcion, una referencia a determinado metodos que se asignan al nombre del delegado

    justamente el delegado define la firma del metodo (como bien has mencionado) seria los parametros y tipo que este debe devolver como retorno

    si define una firma que diga que se debe recibir un numero y no retornar nada, solo los metodos que cumplen con esta podran acoplarse al delafado, el resto no

    o sea si el delegado dice

    public delegate int CalcularHandler(int numero);

    un metodo como ser

    public int CalcularSaldo(int numero) {}

    podria unirse al delegado

    pero si defines

    public void RegistrarCalculo(int numero) {}

    este no es compatible porque no cumple la firma al no devolver un valor de retorno

     

     

    esta parte que has mencionado "puede heredar sus propiedades y convertirce en un objeto" es incorrecta, alli haces referencia a una herancia de clases, no a un delegado, este trabaja a nivel de metodo o funciones, no de clases u objetos

     

    igual me aprecio raro que el link del msdn no lo entendieras es mas que claro alli planteado y con ejemplos, has intentado realizar algun ejemplo como los del link ? lo pregunto porque te aclararia muchas dudas

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marked as answer by whaitie Tuesday, August 30, 2011 8:19 PM
    Tuesday, August 30, 2011 7:41 PM
  • Un delegado es un Objeto que emcapsula o contiene dentro de el ,Metodos , a los cuales el delegado y el metodo deben de tener la misma firma, o devolver el mismo tipo de datos, de lo contrario

    en realidad no se si las palabras encapsular o contener serian asl adecuadas, sino mas bien referencian, por eso lo similar en concepto al puntero, el resto es correcto

    por ejemplo, tu en que ocacion usarias

    el lugar mas usado sin duda es con eventos, se puede suar simple como ves en el link del msdn que has proporcionado, alli hay varios ejemplo simples

    si quieres una aplicacion paractica

    [Winforms] Singleton - Pasar datos entre formularios

    podrias suarlo para comunciar formulario pasando acciones entre ellos, analzia la segudna parte del articulo

     

    y si un delegado solo puede usar los metodos de la clase en la que es creado, o puede usar de diferentes clases publicas

    si tiene accesibilidad, o sea el delegado y los metodo puede verse, entonces pueden referenciarse sin problemas

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by whaitie Tuesday, August 30, 2011 8:19 PM
    Tuesday, August 30, 2011 8:03 PM

All replies

  • esta linea del msdn lo resumen perfectamente

    Un delegado es un tipo de objeto que encapsula un método de forma segura, similar a un puntero a función de C y C++

    como veras si conoces algo de c o c++ piensa al delegado como un puntero a una funcion, una referencia a determinado metodos que se asignan al nombre del delegado

    justamente el delegado define la firma del metodo (como bien has mencionado) seria los parametros y tipo que este debe devolver como retorno

    si define una firma que diga que se debe recibir un numero y no retornar nada, solo los metodos que cumplen con esta podran acoplarse al delafado, el resto no

    o sea si el delegado dice

    public delegate int CalcularHandler(int numero);

    un metodo como ser

    public int CalcularSaldo(int numero) {}

    podria unirse al delegado

    pero si defines

    public void RegistrarCalculo(int numero) {}

    este no es compatible porque no cumple la firma al no devolver un valor de retorno

     

     

    esta parte que has mencionado "puede heredar sus propiedades y convertirce en un objeto" es incorrecta, alli haces referencia a una herancia de clases, no a un delegado, este trabaja a nivel de metodo o funciones, no de clases u objetos

     

    igual me aprecio raro que el link del msdn no lo entendieras es mas que claro alli planteado y con ejemplos, has intentado realizar algun ejemplo como los del link ? lo pregunto porque te aclararia muchas dudas

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marked as answer by whaitie Tuesday, August 30, 2011 8:19 PM
    Tuesday, August 30, 2011 7:41 PM
  • esta linea del msdn lo resumen perfectamente

    Un delegado es un tipo de objeto que encapsula un método de forma segura, similar a un puntero a función de C y C++

    como veras si conoces algo de c o c++ es un puntero a una funcion, una referencia a determinado metodos

    justamente el delegado defina la firma del metodo que como bien has mencionado seria los parametros y tipo  que este debe devolver como retorno

    si defines una firma que diga que se debe recibir un numero y no retornar nada, solo los metodos que cumplen con esta podran acoplarse al delafado, el resto no

    o sea si el delegado dice

    public delegate int CalcularHandler(int numero);

    un metodo como ser

    public int CalcularSaldo(int numero) {}

    podria unirse al delegado

    pero si defines

    public void RegistrarCalculo(int numero) {}

    este no es compatible porque no cumple la firma al no devolver un valor de retorno

     

     

    esta parte que has mencionado "puede heredar sus propiedades y convertirce en un objeto" es incorrecta, alli haces referencia a una herancia de clases, no a un delegado, este tabaj a nivel de metodo y funciones no de clases u objetos (que estan a un nivel superior)

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    o gracias , entonces aver mi nueva definicion:

    Un delegado es un Objeto que emcapsula o contiene dentro de el ,Metodos , a los cuales el delegado y el metodo deben de tener la misma firma, o devolver el mismo tipo de datos, de lo contrario , seria error no ?

    y por ejemplo, tu en que ocacion usarias( o usas habitualmente un delegado (en un ejemplo de codigo sencillo si puede ser ^^) )

     

    y si un delegado solo puede usar los metodos de la clase en la que es creado, o puede usar de diferentes clases publicas?

     

    gracias por tu ayuda Leandro ^^


    Sabio es aquel que abre su cabeza y siempre agrega nuevos conocimientos, no aquel que se cree saberlo todo
    Tuesday, August 30, 2011 7:54 PM
  • Un delegado es un Objeto que emcapsula o contiene dentro de el ,Metodos , a los cuales el delegado y el metodo deben de tener la misma firma, o devolver el mismo tipo de datos, de lo contrario

    en realidad no se si las palabras encapsular o contener serian asl adecuadas, sino mas bien referencian, por eso lo similar en concepto al puntero, el resto es correcto

    por ejemplo, tu en que ocacion usarias

    el lugar mas usado sin duda es con eventos, se puede suar simple como ves en el link del msdn que has proporcionado, alli hay varios ejemplo simples

    si quieres una aplicacion paractica

    [Winforms] Singleton - Pasar datos entre formularios

    podrias suarlo para comunciar formulario pasando acciones entre ellos, analzia la segudna parte del articulo

     

    y si un delegado solo puede usar los metodos de la clase en la que es creado, o puede usar de diferentes clases publicas

    si tiene accesibilidad, o sea el delegado y los metodo puede verse, entonces pueden referenciarse sin problemas

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by whaitie Tuesday, August 30, 2011 8:19 PM
    Tuesday, August 30, 2011 8:03 PM
  • graciasa tu ejemplo en tu blog me saco las dudas y la definicion quedo perfecto.

     

    te lo re agradesco leandro ^^ , saludos y exitos


    Sabio es aquel que abre su cabeza y siempre agrega nuevos conocimientos, no aquel que se cree saberlo todo
    Tuesday, August 30, 2011 8:19 PM