Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bir temsilciye bir yöntem atadığınızda, kovaryans ve ters değişken , bir temsilci türünü yöntem imzası ile eşleştirme esnekliği sağlar. Kovaryans, bir metodun temsilcide tanımlanandan daha fazla türetilmiş dönüş türüne sahip olmasına olanak tanır. Contravariance, temsilci türündekilerden daha az türetilmiş parametre türlerine sahip bir yönteme izin verir.
Örnek 1: Kovaryans
Açıklama
Bu örnek, temsilcilerin, temsilci imzasında belirtilen dönüş türlerinden türetilen dönüş türlerine sahip yöntemlerle nasıl kullanılabileceğini gösterir.
DogsHandler
tarafından döndürülen veri türü, temsilcide tanımlanan Dogs
türünden türetilen Mammals
türündedir.
Kod
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;
}
}
Örnek 2: Kontravaryans
Açıklama
Bu örnek, temsilcilerin, parametre türleri temsilci imzasındaki parametre türünün temel türleri olan yöntemlerle nasıl kullanılabileceğini gösterir. Contravariance ile ayrı işleyiciler yerine tek bir olay işleyicisi kullanabilirsiniz. Aşağıdaki örnekte iki temsilci kullanılır:
KeyEventHandler Button.KeyDown olayının imzasını tanımlayan bir temsilci. İmzası:
public delegate void KeyEventHandler(object sender, KeyEventArgs e)
MouseEventHandler Button.MouseClick olayının imzasını tanımlayan bir temsilci. İmzası:
public delegate void MouseEventHandler(object sender, MouseEventArgs e)
Örnek, bir EventArgs parametresine sahip olay işleyicisi tanımlar ve bunu hem Button.KeyDown
hem Button.MouseClick
olaylarını işlemek için kullanır. Bunu yapabilir çünkü EventArgs hem KeyEventArgs hem de MouseEventArgs için bir taban türdür.
Kod
// 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;
}