Dela via


Ombud (C#-programmeringsguide)

Ett delegat är en typ som representerar referenser till metoder med en viss parameterlista och returtyp. När du instansierar ett ombud kan du associera ombudsinstansen med valfri metod som har en kompatibel signatur och returtyp. Du kan anropa (eller kalla på) metoden via delegeringsinstansen.

Delegater används för att skicka metoder som argument till andra metoder. Händelsehanterare är i princip metoder som du anropar via delegater. När du skapar en anpassad metod kan en klass som en Windows-kontroll anropa din metod när en viss händelse inträffar.

I följande exempel visas en delegatdeklaration:

public delegate int PerformCalculation(int x, int y);

Du kan tilldela valfri metod från valfri tillgänglig klass eller struktur som matchar delegattypen till delegaten. Metoden kan vara antingen statisk eller en instansmetod. Med flexibiliteten kan du programmatiskt ändra metodanrop eller ansluta ny kod till befintliga klasser.

Notera

I samband med metodöverlagring innehåller signaturen för en metod inte returvärdet. I samband med delegater inkluderar signaturen dock returvärdet. Med andra ord måste en metod ha en kompatibel returtyp som den returtyp som deklareras av delegeringen.

Möjligheten att referera till en metod som parameter gör delegater idealiska för att definiera återanropsmetoder. Du kan skriva en metod som jämför två objekt i ditt program. Metoden kan sedan användas i en delegat för en sorteringsalgoritm. Eftersom jämförelsekoden är separat från biblioteket kan sorteringsmetoden vara mer allmän.

funktionspekare stöder liknande scenarier, där du behöver mer kontroll över anropskonventionen. Koden som är associerad med ett ombud anropas med hjälp av en virtuell metod som läggs till i en ombudstyp. När du arbetar med funktionspekare kan du ange olika konventioner.

Utforska ombudsegenskaper

Ombuden har följande egenskaper:

  • Delegater tillåter att metoder skickas som parametrar.
  • Delegater kan användas för att definiera återanropsmetoder.
  • Ombud kan kopplas samman, till exempel genom att anropa flera metoder för en enskild händelse.
  • Metoderna behöver inte matcha ombudstypen exakt. För mer information, se Använda varians i Delegater.
  • Lambda-uttryck är ett koncisare sätt att skriva inlinje kodblock. Lambda-uttryck (i vissa kontexter) kompileras för att delegera typer. Mer information om lambda-uttryck finns i Lambda-uttryck.

Mer information om ombud finns i följande artiklar:

Få åtkomst till C#-språkspecifikationen

Språkspecifikationen är den slutgiltiga källan för C#-syntax och -användning. Mer information finns i Delegater i C#-språkspecifikationen.