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);
}
}
}