using System;Parameter compability:
namespace DelegateCompatibility
{
class Program
{
delegate void D1();
delegate void D2();
static void Method1(){}
static void Main(string[] args)
{
D1 d1 = Method1;
//D2 d2 = d1;//!Hata delegate ler birbirileriyle uymsuzdur.Bu yüzden hata verir.
//Ama aşağıdaki gibi tanımlayabiliriz.
D2 d2 = new D2(d1);
//Eğer aynı delegateler aynı sırayla aynı methodlara sahiblerse bunlar birbirlerine eşit sayılabilirler.
//Örneğin
D1 d3 = Method1;
Console.WriteLine(d1 == d3);//True
Console.ReadKey();
}
}
}
Contravariance özelliğini sağlamaktadır. Aşağıdaki örnekte string türü olan bir methoda object türü de uygulanabilmektedir.
using System;Return type compability:
namespace DelegateCompatibility
{
class Program
{
delegate void StringAction(string s);
static void ActionOnObject(object o)
{
Console.WriteLine(o);//Hello
}
static void Main(string[] args)
{
StringAction sa = new StringAction(ActionOnObject);
sa("Hello");
}
}
}
Covariance özelliğini sağlamaktadır. Aşağıdaki örnekte görüldüğü gibi object türünde bir delegate string metdounu desteklemektedir.
using System;
namespace DelegateCompatibility
{
class Program
{
delegate object ObjectRetriever();
static string RetriveString() { return "hello"; }
static void Main(string[] args)
{
ObjectRetriever or = new ObjectRetriever(RetriveString);
object result = or();
Console.WriteLine(result);
Console.ReadKey();
}
}
Not:
Contravariance alt kümeden üst kümeyi desteklemesi durumudur.(string-->object)
Covariance üst kümenin alt kümeyi sağlaması durumudur.(object-->string)