委託是一種引用方法的類型,一旦爲委託分配方法,委託將與方法具有完全相同的行爲,具有參數和返回值。委託中的方法可以是靜態的也可以是實例方法。
委託特點:1、委託類似於C++函數指針,但它們是類型安全的。
2、委託允許將方法作爲參數進行傳遞。
3、委託可以定義回調方法。
4、 委託可以鏈接在一起。
5、 方法不必與委託簽名完全匹配。
委託的協變:把子類型賦給父類型,代理返回值類型大於方法的。
class Phone
{
}
class Mobile : Phone
{
}
delegate Phone PhoneDele();
class Program
{
static void Main(string[] args)
{
Program pro = new Program();
PhoneDele pd1 = pro.GetPhone;
PhoneDele pd2 = pro.GetMobile;//委託類型的協變
}
public Phone GetPhone()
{
return null;
}
public Mobile GetMobile()
{
return null;
}
}
委託的逆變:形參爲父類,實參爲子類,代理的參數類型小於方法的。
class Phone
{ }
class Mobile : Phone
{ }
delegate void PhoneDele(Mobile pho);
class Program
{
static void Main(string[] args)
{
Program pro = new Program();
PhoneDele pd1 = pro.SetPhone;//委託類型的逆變
PhoneDele pd2 = pro.SetMobile;
}
public void SetPhone(Phone pho)
{ }
public void SetMobile(Mobile mob)
{ }
}
協變和逆變正好說明了委託的第五個特點。
事件和委託的關聯
1、定義委託
delegate void DL(string str);
2、定義事件
event DL sj //事件名和委託名必須一樣
3、定義委託方法
public void MyMethod(string str)
{
Console.WriteLine("方法參數爲:" + str);
}
4、訂閱方法
Program pro = new Program();
pro.MyEvent += new MyDele(pro.MyMethod);
5觸發事件
pro.MyMethod("參數1");