EventHandler<TEventArgs> Delegált
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Azt a metódust jelöli, amely egy eseményt kezel, amikor az esemény adatokat ad meg.
generic <typename TEventArgs>
public delegate void EventHandler(System::Object ^ sender, TEventArgs e);
generic <typename TEventArgs>
where TEventArgs : EventArgspublic delegate void EventHandler(System::Object ^ sender, TEventArgs e);
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);
public delegate void EventHandler<in TEventArgs>(object? sender, TEventArgs e) where TEventArgs : allows ref struct;
public delegate void EventHandler<TEventArgs>(object? sender, TEventArgs e);
[System.Serializable]
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e) where TEventArgs : EventArgs;
[System.Serializable]
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);
type EventHandler<'EventArgs> = delegate of obj * 'EventArgs -> unit
[<System.Serializable>]
type EventHandler<'EventArgs (requires 'EventArgs :> EventArgs)> = delegate of obj * 'EventArgs -> unit
[<System.Serializable>]
type EventHandler<'EventArgs> = delegate of obj * 'EventArgs -> unit
Public Delegate Sub EventHandler(Of TEventArgs)(sender As Object, e As TEventArgs)
Public Delegate Sub EventHandler(Of In TEventArgs)(sender As Object, e As TEventArgs)
Típusparaméterek
- TEventArgs
Az esemény által létrehozott eseményadatok típusa.
Paraméterek
- sender
- Object
Az esemény forrása.
- e
- TEventArgs
Az eseményadatokat tartalmazó objektum.
- Attribútumok
Példák
Az alábbi példa egy eseményt mutat be ThresholdReached. Az esemény egy EventHandler<TEventArgs> meghatalmazotthoz van társítva.
using System;
namespace ConsoleApplication3
{
public class Program3
{
public static void Main()
{
Counter c = new(new Random().Next(10));
c.ThresholdReached += c_ThresholdReached;
Console.WriteLine("press 'a' key to increase total");
while (Console.ReadKey(true).KeyChar == 'a')
{
Console.WriteLine("adding one");
c.Add(1);
}
}
static void c_ThresholdReached(object? sender, ThresholdReachedEventArgs e)
{
Console.WriteLine("The threshold of {0} was reached at {1}.", e.Threshold, e.TimeReached);
Environment.Exit(0);
}
}
class Counter
{
private readonly int _threshold;
private int _total;
public Counter(int passedThreshold)
{
_threshold = passedThreshold;
}
public void Add(int x)
{
_total += x;
if (_total >= _threshold)
{
ThresholdReachedEventArgs args = new()
{
Threshold = _threshold,
TimeReached = DateTime.Now
};
OnThresholdReached(args);
}
}
protected virtual void OnThresholdReached(ThresholdReachedEventArgs e)
{
ThresholdReached?.Invoke(this, e);
}
public event EventHandler<ThresholdReachedEventArgs>? ThresholdReached;
}
public class ThresholdReachedEventArgs : EventArgs
{
public int Threshold { get; set; }
public DateTime TimeReached { get; set; }
}
}
open System
type ThresholdReachedEventArgs(threshold, timeReached) =
inherit EventArgs()
member _.Threshold = threshold
member _.TimeReached = timeReached
type Counter(threshold) =
let mutable total = 0
let thresholdReached = Event<_>()
member this.Add(x) =
total <- total + x
if total >= threshold then
let args = ThresholdReachedEventArgs(threshold, DateTime.Now)
thresholdReached.Trigger(this, args)
[<CLIEvent>]
member _.ThresholdReached = thresholdReached.Publish
let c_ThresholdReached(sender, e: ThresholdReachedEventArgs) =
printfn $"The threshold of {e.Threshold} was reached at {e.TimeReached}."
exit 0
let c = Counter(Random().Next 10)
c.ThresholdReached.Add c_ThresholdReached
printfn "press 'a' key to increase total"
while Console.ReadKey(true).KeyChar = 'a' do
printfn "adding one"
c.Add 1
Module Module1
Sub Main()
Dim c As Counter = New Counter(New Random().Next(10))
AddHandler c.ThresholdReached, AddressOf c_ThresholdReached
Console.WriteLine("press 'a' key to increase total")
While Console.ReadKey(True).KeyChar = "a"
Console.WriteLine("adding one")
c.Add(1)
End While
End Sub
Sub c_ThresholdReached(sender As Object, e As ThresholdReachedEventArgs)
Console.WriteLine("The threshold of {0} was reached at {1}.", e.Threshold, e.TimeReached)
Environment.Exit(0)
End Sub
End Module
Class Counter
Private threshold As Integer
Private total As Integer
Public Sub New(passedThreshold As Integer)
threshold = passedThreshold
End Sub
Public Sub Add(x As Integer)
total = total + x
If (total >= threshold) Then
Dim args As ThresholdReachedEventArgs = New ThresholdReachedEventArgs()
args.Threshold = threshold
args.TimeReached = DateTime.Now
OnThresholdReached(args)
End If
End Sub
Protected Overridable Sub OnThresholdReached(e As ThresholdReachedEventArgs)
RaiseEvent ThresholdReached(Me, e)
End Sub
Public Event ThresholdReached As EventHandler(Of ThresholdReachedEventArgs)
End Class
Class ThresholdReachedEventArgs
Inherits EventArgs
Public Property Threshold As Integer
Public Property TimeReached As DateTime
End Class
Megjegyzések
A .NET eseménymodellje egy esemény delegáltján alapul, amely összekapcsol egy eseményt a kezelőjével. Az esemény létrehozásához két elemre van szükség:
- Egy olyan meghatalmazott, amely egy olyan metódusra hivatkozik, amely választ ad az eseményre.
- Ha az esemény adatokat szolgáltat, egy olyan osztály is, amely az esemény adatait tartalmazza.
A meghatalmazott egy olyan típus, amely meghatározza az aláírást, vagyis a metódus visszatérési értéktípusát és paraméterlista-típusait. A delegálás típusával deklarálhat egy változót, amely bármely olyan metódusra hivatkozhat, amely ugyanazzal az aláírással rendelkezik, mint a meghatalmazott.
Az eseménykezelő delegáltjának szabványos aláírása olyan metódust határoz meg, amely nem ad vissza értéket. Ennek a metódusnak az első paramétere típus, Object és az eseményt okozó példányra hivatkozik. A második paraméter a típusból EventArgs származik, és az eseményadatokat tárolja. Ha az esemény nem hoz létre eseményadatokat, a második paraméter egyszerűen a EventArgs.Empty mező értéke. Ellenkező esetben a második paraméter egy olyan típus, amely az eseményadatok tárolásához szükséges mezőket EventArgs vagy tulajdonságokat adja meg.
A EventHandler<TEventArgs> delegált egy előre definiált meghatalmazott, amely egy eseménykezelő metódust jelöl az adatokat létrehozó eseményhez. A használat EventHandler<TEventArgs> előnye, hogy nem kell saját egyéni meghatalmazottat kódolnia, ha az esemény eseményadatokat hoz létre. Egyszerűen adja meg az eseményadat-objektum típusát általános paraméterként.
Ha az eseményt az eseményt kezelő metódushoz szeretné társítani, adja hozzá a meghatalmazott egy példányát az eseményhez. Az eseménykezelőt mindig meghívja a rendszer, ha nem távolítja el a meghatalmazottat.
Az eseménykezelő delegáltjaival kapcsolatos további információkért lásd: Események kezelése és emelése.
Bővítő metódusok
| Name | Description |
|---|---|
| GetMethodInfo(Delegate) |
Lekéri a megadott meghatalmazott által képviselt metódust képviselő objektumot. |