Dela via


Ombud (programmeringsguide för C# )

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

Ombud används för att skicka metoder som argument till andra metoder. Händelsehanterare är inget annat än metoder som anropas via ombud. Du skapar en anpassad metod och en klass, till exempel en Windows-kontroll, kan anropa din metod när en viss händelse inträffar. I följande exempel visas en ombudsdeklaration:

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

Alla metoder från valfri tillgänglig klass eller struct som matchar ombudstypen kan tilldelas till ombudet. Metoden kan vara antingen statisk eller en instansmetod. Den här flexibiliteten innebär att du programmatiskt kan ändra metodanrop eller ansluta ny kod till befintliga klasser.

Anteckning

I samband med metodöverlagring inkluderar signaturen för en metod inte returvärdet. Men i samband med ombud inkluderar signaturen returvärdet. Med andra ord måste en metod ha samma returtyp som ombudet.

Den här möjligheten att referera till en metod som en parameter gör ombud idealiska för att definiera återanropsmetoder. Du kan skriva en metod som jämför två objekt i ditt program. Den metoden kan användas i ett ombud för en sorteringsalgoritm. Eftersom jämförelsekoden är separat från biblioteket kan sorteringsmetoden vara mer allmän.

Funktionspekare har lagts till i C# 9 för 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. Med hjälp av funktionspekare kan du ange olika konventioner.

Översikt över ombud

Ombud har följande egenskaper:

  • Ombud liknar C++-funktionspekare, men ombuden är helt objektorienterade, och till skillnad från C++-pekare till medlemsfunktioner kapslar ombuden in både en objektinstans och en metod.
  • Ombud tillåter att metoder skickas som parametrar.
  • Ombud kan användas för att definiera återanropsmetoder.
  • Ombud kan sammanlänkas; Till exempel kan flera metoder anropas för en enda händelse.
  • Metoderna behöver inte matcha ombudstypen exakt. Mer information finns i Använda varians i ombud.
  • Lambda-uttryck är ett mer koncist sätt att skriva infogade kodblock. Lambda-uttryck (i vissa kontexter) kompileras till delegerade typer. Mer information om lambda-uttryck finns i Lambda-uttryck.

I det här avsnittet

C#-språkspecifikation

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

Se även