Variancia használata a meghatalmazottakban (C#)
Amikor metódust rendel egy delegálthoz, a kovariancia és a kontravariancia rugalmasságot biztosít a meghatalmazott típusának metódusa aláírással való egyeztetéséhez. A kovariancia lehetővé teszi, hogy egy metódus olyan visszatérési típussal rendelkezzen, amely származtatottabb, mint a delegáltban definiált. A contravariance olyan metódust engedélyez, amely a delegált típushoz képest kevésbé származtatott paramétertípusokkal rendelkezik.
1. példa: Kovariancia
Leírás
Ez a példa bemutatja, hogyan használhatók a delegáltak olyan metódusokkal, amelyek a delegált aláírás visszatérési típusából származtatott visszatérési típussal rendelkeznek. A visszaadott DogsHandler
adattípus típusa a Dogs
delegáltban definiált típusból Mammals
származik.
Kód
class Mammals {}
class Dogs : Mammals {}
class Program
{
// Define the delegate.
public delegate Mammals HandlerMethod();
public static Mammals MammalsHandler()
{
return null;
}
public static Dogs DogsHandler()
{
return null;
}
static void Test()
{
HandlerMethod handlerMammals = MammalsHandler;
// Covariance enables this assignment.
HandlerMethod handlerDogs = DogsHandler;
}
}
2. példa: Contravariance
Leírás
Ez a példa bemutatja, hogyan használhatók a delegáltak olyan metódusokkal, amelyek olyan paraméterekkel rendelkeznek, amelyek típusa a delegált aláírás paramétertípus alaptípusa. A contravariance használatával külön kezelők helyett egy eseménykezelőt használhat. Az alábbi példa két meghatalmazottat használ:
A KeyEventHandler Button.KeyDown esemény aláírását meghatározó meghatalmazott. Aláírása:
public delegate void KeyEventHandler(object sender, KeyEventArgs e)
A MouseEventHandler Button.MouseClick esemény aláírását meghatározó meghatalmazott. Aláírása:
public delegate void MouseEventHandler(object sender, MouseEventArgs e)
A példa egy paraméterrel rendelkező EventArgs eseménykezelőt határoz meg, és azt használja az események és Button.MouseClick
az Button.KeyDown
események kezelésére is. Ez azért lehetséges, mert EventArgs mindkettő és KeyEventArgsMouseEventArgsa .
Kód
// Event handler that accepts a parameter of the EventArgs type.
private void MultiHandler(object sender, System.EventArgs e)
{
label1.Text = System.DateTime.Now.ToString();
}
public Form1()
{
InitializeComponent();
// You can use a method that has an EventArgs parameter,
// although the event expects the KeyEventArgs parameter.
this.button1.KeyDown += this.MultiHandler;
// You can use the same method
// for an event that expects the MouseEventArgs parameter.
this.button1.MouseClick += this.MultiHandler;
}
Kapcsolódó információk
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: