Archief - [PROG] Delegate - Wat/Waarom?

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

v1sioNz

Legacy Member
Kan iemand mij uitleggen wat een delegate juist is en waarom men een delegate zou gebruiken? Het is zo dat ik al de hele avond aan het rondspeuren ben op internet maar dat ik het maar niet wil snappen (frustrerend). :cry:

Ik refereer naar een bestaande topic op Tweakers.net [HIER]

Daar proberen ze het uit te leggen aan de hand van een voorbeeld (C#):

Code:
public class Rekenen
{
  public int TelOp(int a, int b) { return a + b; }
  public int TrekAf(int a, int b) { return a - b; }

  public delegate int Bereken(int a, int b);


  public Rekenen()
  {
      if (DateTime.Now.Seconds % 2 == 0)
        this.Bereken = TelOp;
      else
        this.Bereken = TrefAk;
  }

  public static void Main()
  {
     Rekenen rek = new Rekenen();
     rek.Bereken(1, 2); 
  }
}

Nu, ik zie gewoon niet in waarom men zo iets zou toepassen. Ik zie gewoon het nut er niet van in. Kan iemand mij helpen?

Raf

Bavo aka Joske

Legacy Member
Dat heeft Java niet, en ik ben daar eigenlijk iet zo boos om :) Zulke zaken kunnen snel wordne misbruikt, er moeten heel goede guidelines zijn vooraleer je daarmee begint.

epsilon

Legacy Member
Eigen vraag: Worden delegates ook niet gebruikt bij multithreading om zo info veilig tussen verschillende threads te kunnen geven.

Bavo aka Joske

Legacy Member
Euh? Ik zie niet meteen in wat dat met synchronisatie of data-veiligheid heeft te maken

Fiestaver

Legacy Member
ik gebruik delegate bijv.
om vanuit nen wuc nen control aan te spreken op mijn webform
anders kan je daar nooit aan!

forloRn_

Legacy Member
Wat is het verschil met de method in een interface zetten, en een member van dat type toevoegen? Voorbeeldje in Java:

Code:
	private interface BerekenInterface {
		  int bereken (int a, int b);
	}

	private class TelOp implements BerekenInterface { public int bereken (int a, int b) { return a + b; }};
	private class TrekAf implements BerekenInterface { public int bereken (int a, int b) { return a - b; }};
	
	private BerekenInterface bereken;

Dan kan je toch ook at runtime bepalen welke method je aanroept?

Krueger

Legacy Member
v1sioNz zei:
Kan iemand mij uitleggen wat een delegate juist is en waarom men een delegate zou gebruiken? Het is zo dat ik al de hele avond aan het rondspeuren ben op internet maar dat ik het maar niet wil snappen (frustrerend). :cry:

Ik refereer naar een bestaande topic op Tweakers.net [HIER]

Daar proberen ze het uit te leggen aan de hand van een voorbeeld (C#):

Code:
public class Rekenen
{
  public int TelOp(int a, int b) { return a + b; }
  public int TrekAf(int a, int b) { return a - b; }

  public delegate int Bereken(int a, int b);


  public Rekenen()
  {
      if (DateTime.Now.Seconds % 2 == 0)
        this.Bereken = TelOp;
      else
        this.Bereken = TrefAk;
  }

  public static void Main()
  {
     Rekenen rek = new Rekenen();
     rek.Bereken(1, 2); 
  }
}

Nu, ik zie gewoon niet in waarom men zo iets zou toepassen. Ik zie gewoon het nut er niet van in. Kan iemand mij helpen?

Raf

Je vooorbeeld is idd geen goed voorbeeld om het gebruik van delegates aan te tonen. Hier is er geen voordeel aan het gebruik van een delegate tov. het rechtstreeks aanroepen van dee functie zelf.

Een beter voorbeeld is als je 2 threads hebt. In c# is het zo dat enkel de main thread naar de GUI mag schrijven. Als je toch vanuit de tweede thread iets van de GUI wil veranderen (vb. text van een textbox wijzigen), dan moet je een functie invoken.

Een invoke verwacht echter een delgate als argument. Die delegate zal dan een pointer zijn naar de functie die moet worden opgeroepen, deze zal dan wel de elementen van een GUI kunnen wijzigen.

Bavo aka Joske

Legacy Member
Krueger zei:
Een beter voorbeeld is als je 2 threads hebt. In c# is het zo dat enkel de main thread naar de GUI mag schrijven. Als je toch vanuit de tweede thread iets van de GUI wil veranderen (vb. text van een textbox wijzigen), dan moet je een functie invoken.

Een invoke verwacht echter een delgate als argument. Die delegate zal dan een pointer zijn naar de functie die moet worden opgeroepen, deze zal dan wel de elementen van een GUI kunnen wijzigen.

Hmmja, dat is dan wat java doet met Callbacks of Runnable interfaces. Het scheelt weinig, maar kan misschien syntactisch eleganter zijn.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan