Introduktion till ombud och evenemang i C#

Ombud tillhandahåller en mekanism för sen bindning i .NET. Sen bindning innebär att du skapar en algoritm där anroparen även tillhandahåller minst en metod som implementerar en del av algoritmen.

Överväg till exempel att sortera en lista över stjärnor i ett astronomiprogram. Du kan välja att sortera dessa stjärnor efter deras avstånd från jorden, stjärnans storlek eller deras upplevda ljusstyrka.

I alla dessa fall gör metoden Sort() i stort sett samma sak: ordnar objekten i listan baserat på en jämförelse. Koden som jämför två stjärnor är olika för var och en av sorteringsordningarna.

Den här typen av lösningar har använts i programvara i ett halvt sekel. Konceptet C#-språkdelegat ger förstklassigt språkstöd och typsäkerhet kring konceptet.

Som du ser senare i den här serien är C#-koden som du skriver för algoritmer som den här typen säker. Kompilatorn ser till att typerna matchar argument och returtyper.

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. Med hjälp av funktionspekare kan du ange olika konventioner.

Språkdesignmål för ombud

Språkdesignersna uppräknade flera mål för funktionen som så småningom blev delegater.

Teamet ville ha en gemensam språkkonstruktion som kunde användas för alla sena bindningsalgoritmer. Ombud gör det möjligt för utvecklare att lära sig ett begrepp och använda samma koncept för många olika programvaruproblem.

För det andra ville teamet ha stöd för anrop för både enstaka metoder och multicast-metoder. (Multicast-ombud är ombud som kedjar samman flera metodanrop. Du ser exempel senare i den här serien.)

Teamet ville att ombuden skulle stödja samma typ av säkerhet som utvecklare förväntar sig av alla C#-konstruktioner.

Slutligen kände teamet igen ett händelsemönster är ett specifikt mönster där ombud, eller någon sen bindningsalgoritm, är användbara. Teamet ville se till att koden för ombud kunde utgöra grunden för .NET-händelsemönstret.

Resultatet av allt arbete var ombuds- och händelsesupporten i C# och .NET.

De återstående artiklarna i den här serien beskriver språkfunktioner, biblioteksstöd och vanliga idiom som används när du arbetar med ombud och evenemang. Du får lära dig mer om:

  • Nyckelordet delegate och vilken kod det genererar.
  • Funktionerna i System.Delegate klassen och hur dessa funktioner används.
  • Så här skapar du typsäkra ombud.
  • Så här skapar du metoder som kan anropas via ombud.
  • Så här arbetar du med ombud och händelser med hjälp av lambda-uttryck.
  • Hur ombud blir en av byggstenarna för LINQ.
  • Hur ombud är grunden för .NET-händelsemönstret och hur de skiljer sig.

Nu sätter vi i gång.

Nästa