Delegaatit ovat metodiosoittimia, eli delegaattia kutsuttaessa kutsutaankin sitä kuuntelevia metodeja. Delegaatti voi osoittaa useampaan metodiin yhtä aikaa. Delegaatin esittely muistuttaa metodia ilman toteutusta (abstrakti metodi) lisättynä delegate -avainsanalla.

[määreet] delegate [paluutyyppi] [nimi]([parametrit]);

Määreiksi käyvät new sekä näkyvyysmääreet.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DelegateDemo
{
    class OmaLuokka
    {
        // delegaatin esittely
        public delegate void KirjoitaLokiin(string viesti);

        // delegaatin ilmentymä/instanssi
        public KirjoitaLokiin LokiDelegaatti { get; set; }

        public void SuoritaTehtava1()
        {
            // kutsutaan delegaattia
            LokiDelegaatti("Tehtävä 1 suoritettu");
        }
        public void SuoritaTehtava2()
        {
            // kutsutaan delegaattia
            LokiDelegaatti("Tehtävä 2 suoritettu");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            OmaLuokka oma = new OmaLuokka();

            // asetetaan delegaatti osoittamaan metodiin
            oma.LokiDelegaatti = KirjoitaTiedostoon;
            // delegaattiin voi lisätä kuuntelijoita += operaattorilla
            oma.LokiDelegaatti += KirjoitaTietokantaan;

            oma.SuoritaTehtava1();

            // delegaatista voi poistaa kuuntelijoita -= operaattorilla
            oma.LokiDelegaatti -= KirjoitaTiedostoon;

            oma.SuoritaTehtava2();
        }
        static void KirjoitaTiedostoon(string viesti)
        {
            Console.WriteLine("Tiedostoon: "+viesti);
        }
        static void KirjoitaTietokantaan(string viesti)
        {
            Console.WriteLine("Tietokantaan: " + viesti);
        }
    }
}