Innføring i programmering med C++/CLI

Beskrivelse: Beskrivelse: Beskrivelse: Beskrivelse: Beskrivelse: Beskrivelse: M:\html\Innføring CPP\

 

Om delegater

I objektorientert programmering er det i blant nødvendig å kunne kalle en metode

i en klasse, fra kode som befinner seg i en annen klasse. Dette har tidligere vært

gjort ved hjelp en funksjonspeker eller ved hjelp av en peker som peker til objektet

som metoden befinner seg i.

 

·         Managed kode i .NET tillater imidlertid ikke bruk av pekere på samme måte

som i tradisjonell C++. Dette gjelder også funksjonspekere.

 

For å kunne få til det samme som ved tidligere funksjonspekere, har man innført noe

som kalles delegater.

 

·         En delegate oppfører seg liksom en funksjonspeker og

kan benyttes til å kalle metoder under programkjøring.

 

En delegate er et managed objekt som gir en sikker referanse til en metode.

 

Skal man lage en delegate gjøres dette i to skritt

 

1.    Deklarerer en type delegate ved hjelp av nøkkelordet delegate.

Delegaten deklareres med samme parametre som metoden den skal kalle.

 

2.    Oppretter et objekt fra delegaten.

 

Følgende gir et eksempel på bruk av en delegate.

 

Eksempel

Følgende programbit skriver Hei verden ut i et konsollvindu,

men her benyttes en egen klasse til utskrifter.

 

Eksempelet viser hvordan opprette en delegate til

metoden melding() i klassen utskriftsKlasse.

 

#include "stdafx.h"

 

using namespace System;

 

delegate void MetodeDelegate(String^);

// Her deklareres delegaten.

// Delegaten deklareres med samme parametere som metoden melding().

// void sier at metoden ikke returnerer noe.

// String^ angir at metoden skal ha en String som innparameter.

 

ref class utskriftsKlasse

{

     // Denne klassen har til oppgave å skrive meldinger til skjermen.

 

     public: void melding(String^ str) {

 

          Console::WriteLine(str);

     }

};

 

int main()

{

       utskriftsKlasse^ utskriftObj = gcnew utskriftsKlasse();

 

       MetodeDelegate^ meldingDelegate = gcnew

             MetodeDelegate(utskriftObj, &utskriftsKlasse::melding);

       // Har opprettet et delegate objekt.

       // Innparametere når delegaten opprettes er

       // 1. Objektet som inneholder metoden.

       // 2. Hvilken metode som delegaten skal kalle.

 

       meldingDelegate("\n Hei verden \n");

       // Her brukes delegate objektet til å gjøre utskrift.

}

 

 

Mer om delegater i hjelpesystemet

Link til Delegate class (med eksempel)

 


Einar Krogh

Sist endret: 12. desember 2015