Rekommenderas, 2024

Redaktionen

Skillnad mellan delegater och evenemang i C #

användargrupper och evenemang spelar båda en viktig roll i det händelsesdrivna programmet. Delegaterna kan referera till en metod, och det är ganska lik funktionspekaren i C ++. Händelser meddelar att vissa åtgärder har utförts. Den grundläggande skillnaden mellan delegater och händelser är att delegaterna håller referenserna till metoderna och händelsen ger ett sätt att få tillgång till den metoden med hjälp av delegater.

Jämförelsediagram

Grunder för jämförelsedelegaterevenemang
GrundläggandeEn delegat har referens för en metod.Händelsen är en överlagrad abstraktion som ges till delegaterna.
Syntaxdelegera return_type delegate_name (parameter_list);händelse event_delegate event_name;
NyckelordEn delegat deklareras med ett nyckelord "delegat".En händelse deklareras med hjälp av ett nyckelord "händelse".
DeklarationEn delegat deklareras utanför någon klass.En händelse deklareras i en klass.
ÅberopaFör att åberopa en metod måste det hänvisas till delegaten.För att åberopa en metod måste den tilldelas händelsen.
Covariance och ContravarianceDe ger flexibilitet till delegaterna.Inget sådant begrepp.
Event AccessorInget sådant begrepp.Hanterar listan över händelsehanterare.
DependencyDelegater är oberoende av händelser.Händelsen kan inte skapas utan delegater.

Definition av delegater

I C # -deltagare används som en funktionspekare för att hänvisa till en metod. Det är specifikt ett objekt som refererar till en metod som tilldelas den. Samma delegat kan användas för att hänvisa till olika metoder, eftersom den är kapabel att hålla referensen till olika metoder, men en i taget. Vilken metod som kommer att åberopas av delegaten bestäms under körtiden. Syntaxen för att deklarera en delegat är följande:

 delegera return_type delegate_name (parameter_list); 

Här förklarar return_type den typ av värde som returneras av metoden, som kallas av delegat och delegatnamn är namnet på delegaten. Parameterlistan definierar listan över parametrar som krävs enligt de metoder som ska kallas av delegaten.

Det finns några viktiga punkter att komma ihåg om delegaterna. Det kan ringa vilken metod som helst som matchar sin signatur och returtypen. En delegat kan ringa både en instansmetod eller en statisk metod. Om det kallas en förekomstmetod måste den ta hjälp av objektet för att åberopa metoden. Delegater stöder multicasting, dvs du kan kedja upp de metoder som automatiskt kommer att ringas när delegaten hänvisar till dem påkallas. Du måste helt enkelt skapa ett delegatobjekt och tilldela metoderna efter varandra till kedjan med hjälp av "+ =" operatören. Du kan också avkoda en metod med "- =" operatören.

Funktionerna som lägger till extra flexibilitet för delegaten är Covariance och Contravariance. Covariance och Contravariance tillåter det villkor där returtypen och signaturen för den metod som delegeras tilldelas skiljer sig från delegatets.

  • Covariance tillåter dig att tilldela en delegat en metod där metodens returtyp är en klass som härrör från klassen som anger delegatets returtyp.
  • Contravariance kan du tilldela en delegat en metod där parametertypen för metoden är en basklass av klassen som anges som parametern för delegaten.

Definition av händelser

Händelser är den åtgärd som utförs som ändrar tillståndet för ett objekt. Händelser deklareras med hjälp av delegater, utan närvaro av delegater du kan inte deklarera händelser. Du kan säga att en händelse ger inkapsling till delegaterna. Det finns två viktiga föreningar vid hantering av händelser som är händelse och händelsehanterare. Om objekten är intresserade av händelsen registrerar den en händelsehanterare för den aktuella händelsen. Och när händelserna är avfyrade heter de registrerade händelsehanterarna. Deklarationen av händelsen är som följer:

 händelse event_delegate event_name; 

Här är "händelse" ett nyckelord som visar deklarationen av en händelse. Därefter visar event_delegate namnet på den delegat som stöder händelsen. Då är event_name namnet på händelsen

Det finns några viktiga punkter att komma ihåg när man hanterar händelserna. Liksom delegater kan händelser också vara multicast, dvs flera objekt som är uppkopplade (registrerade) till en händelsehanterare, svara när en händelse höjas. Eventhanteraren kan läggas till kedjan med operatören "+ =" och kan vara ochainad med användaren "- =" Både statisk och instansmetod kan användas som händelsehanterare. Event Accessor kan ge dig kontroll över genomförandet av händelsehanterarens lista.

Gränssnittet kan innehålla händelser. Händelser kan också vara abstrakta medan accessorbaserad händelse inte kan vara abstrakt. Evenemanget kan vara virtuellt och överträffas av härledd klass.

Viktiga skillnader mellan delegater och evenemang i C #

  1. Delegat är ett objekt som används som en funktionspekare för att hålla referensen för en metod. Å andra sidan ger händelser en abstraktion till delegater.
  2. Ett nyckelord som krävs för att deklarera en delegat är en delegat medan ett nyckelord som krävs för att deklarera en händelse är händelse .
  3. En delegat deklareras utanför en klass medan en händelse deklareras i en klass.
  4. För att åberopa en metod som använder ett delegatobjekt måste metoden hänvisas till delegatobjektet. Å andra sidan, för att åberopa en metod som använder ett händelseobjekt måste metoden hänvisas till händelseobjektet.
  5. Covariance och Contravariance ger extra flexibilitet till delegerade objekt. Å andra sidan har händelsen inga sådana begrepp.
  6. Event Accessor hanterar listan över händelsehanterare medan delegat inte har något sådant begrepp.
  7. Delegater är oberoende av händelser men händelser kan inte skapas utan delegat.

Slutsats:

Delegater är användbara eftersom de stöder händelser, och de ger möjlighet att genomföra metoden vid körning. Eventaccessorn tillåter oss att synkronisera händelsehanterare i multithreading-applikationer.

Top