Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Lanus
    Registrato dal
    Apr 2006
    Messaggi
    43

    [C#] Perchè usare i delegate?

    Io sono passato da poco al C# dal C++.

    In C++ nella programmazione in windows mi ricordo che c'era un ciclo ed una lista degli eventi fatti dall'utente:
    Il ciclo principale ogni volta controllava se un qualche evento era stato fatto dall'utente ed in caso l'avesse fatto avrebbe richiamato una funzione.

    Esempio:
    Codice PHP:
    ciclo principale
    {
         if(
    pressioneX == true)
         {
              
    faiQuesto();
              
    faiQuellAltro();
         }

    Ora in C# perchè dovrei usare un delegate e non questo sistema che usavo anche prima? Che vantaggi fornisce?

  2. #2
    il C++ è un linguaggio procedurale (se erro correggetemi xfavore ) mentre il C# è un linguaggio ad eventi, quindi credo che essendo "basato" su questo sia più veloce e di migliore "interpretazione" x il CLR, oltre che più esatto, secondo me.
    I database... la mia passione + o -

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Non so cosa sia un "linguaggio ad eventi" (qualsiasi linguaggio che supporti puntatori a procedure e metodi può diventarlo), ad ogni modo i delegati sono esattamente una forma "tipata" dei puntatori a metodi del C++ (e di altri linguaggi, come Delphi).

    Non ha senso ricercare forme e strumenti propri di un linguaggio nell'ambito di un'architettura completamente diversa qual è il .NET Framework, poiché l'accesso alle risorse in memoria in quest'ultimo non sono così svincolate come per la piattaforma nativa.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4

    Re: [C#] Perchè usare i delegate?

    Originariamente inviato da Lanus
    Io sono passato da poco al C# dal C++.

    In C++ nella programmazione in windows mi ricordo che c'era un ciclo ed una lista degli eventi fatti dall'utente:
    Il ciclo principale ogni volta controllava se un qualche evento era stato fatto dall'utente ed in caso l'avesse fatto avrebbe richiamato una funzione.

    Esempio:
    Codice PHP:
    ciclo principale
    {
         if(
    pressioneX == true)
         {
              
    faiQuesto();
              
    faiQuellAltro();
         }

    Ora in C# perchè dovrei usare un delegate e non questo sistema che usavo anche prima? Che vantaggi fornisce?
    Al di là del fatto che il ciclo non è fatto esattamente così, se hai programmato per Windows in C (senza framework di nessun genere) per un po' ti sarai reso conto che in applicazioni di dimensioni non indifferenti la window procedure della finestra principale dopo un po' diventa un mostro ingestibile per dimensioni e (spesso) disordine. Il modello impiegato da C# (e da molti altri linguaggi) per notificare e gestire gli eventi rende più semplice organizzare il codice in maniera ordinata e comprensibile.
    il C++ è un linguaggio procedurale
    Sì e no... il C è certamente procedurale, ma il C++ è un linguaggio che supporta benissimo la programmazione OOP, e anzi dispone di caratteristiche OOP che mancano a molti altri linguaggi; d'altra parte essendo il C++ un superset del C consente comunque di programmare tranquillamente in modo procedurale.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di Lanus
    Registrato dal
    Apr 2006
    Messaggi
    43
    Beh in effetti ho sentito il paragone ai puntatori a funzione, ma non avendoli mai usati non ho ancora capito
    Forse utilizzando questo metodo il ciclo continua normalmente ed un altra funzione parte in parallelo? :berto:

    Comunque grazie a tutti per l'aiuto

  6. #6
    Originariamente inviato da Lanus
    Forse utilizzando questo metodo il ciclo continua normalmente ed un altra funzione parte in parallelo? :berto:
    Il message loop e le window procedures sono implementate dal .NET Framework in modo trasparente per lo sviluppatore, che non se ne deve (quasi) mai preoccupare. In pratica tu ti troverai ad istanziare oggetti-finestre (Form, TextBox, PictureBox, ...) che useranno una loro window procedure già fatta per richiamare i vari delegate. "L'altra funzione" (immagino tu ti riferisca a quella cui punta il delegate) non parte "in parallelo", ma viene richiamata normalmente tramite il delegate. Se proprio ti interessa il funzionamento interno del .NET Framework nelle applicazioni Windows Forms dai un'occhiata con ildasm a System.Windows.Forms.dll, in particolare alla classe System.Windows.Forms.Control.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    scusatemi mi intrometto visto che state parlando di teoria.
    Potreste indicarmi dove trovare un approfondimento che spieghi bene le interfacce?
    In generale ho capito cosa sono e a che servono ma dopo aver visto questo:
    Codice PHP:
                IEnumerator enumerator lista.GetEnumerator();
                
                while (
    enumerator.MoveNext())
                {
                    
    Console.WriteLine(enumerator.Current);
                } 
    ho capito che non ho compreso bene tutto.

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Originariamente inviato da Max Mercury
    scusatemi mi intrometto visto che state parlando di teoria.
    Si sta parlando di teoria, ma di un argomento ben specifico, cioè i delegate, come indicato nel titolo.

    Se hai delle domande da porre che riguardano altri argomenti, apri una discussione separata.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.