Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Saat Anda menetapkan metode ke delegasi, kovariansi dan kontravarian memberikan fleksibilitas untuk mencocokkan jenis delegasi dengan tanda tangan metode. Kovarian memungkinkan metode untuk memiliki jenis pengembalian yang lebih khusus daripada yang ditentukan dalam delegasi. Kontravarian memungkinkan metode yang memiliki jenis parameter yang kurang diturunkan daripada yang ada dalam jenis delegasi.
Contoh 1: Kovarians
Deskripsi
Contoh ini menunjukkan bagaimana delegate dapat digunakan dengan metode yang memiliki tipe pengembalian yang diturunkan dari tipe pengembalian dalam tanda tangan delegate. Jenis data yang dikembalikan oleh DogsHandler
adalah dari jenis Dogs
, yang diturunkan dari jenis Mammals
yang ditentukan dalam deleget.
Kode
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;
}
}
Contoh 2: Kontravariansi
Deskripsi
Contoh ini menunjukkan bagaimana delegasi dapat digunakan dengan metode yang memiliki parameter yang jenisnya adalah jenis dasar dari jenis parameter tanda tangan delegasi. Dengan kontravariansi, Anda dapat menggunakan satu penanganan aktivitas alih-alih handler terpisah. Contoh berikut menggunakan dua delegasi:
KeyEventHandler Delegasi yang menentukan tanda tangan peristiwa Button.KeyDown. Tanda tangannya adalah:
public delegate void KeyEventHandler(object sender, KeyEventArgs e)
MouseEventHandler Delegasi yang menentukan tanda tangan peristiwa Button.MouseClick. Tanda tangannya adalah:
public delegate void MouseEventHandler(object sender, MouseEventArgs e)
Contoh mendefinisikan penangan kejadian dengan parameter EventArgs dan menggunakannya untuk menangani kejadian Button.KeyDown
dan Button.MouseClick
. Ini dapat melakukan ini karena EventArgs adalah jenis dasar dari KeyEventArgs dan MouseEventArgs.
Kode
// 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;
}