委託是一種引用方法的類型。委託定義出它想要代表的方法的原型,然後它可以和任何符合它所定義的方法的原型相關聯。但使用委託時就猶如你在調用一個方法。
委託使你動態調用方法變成可能。而動態調用方法的意義就在於你可以在任意的地方插入任意的代碼
//=========================================================================================
using System;
using System.Collections.Generic;
using System.Text;
namespace Delegate_Test
{
/// <summary>
/// 定義一個委託。委託和類一樣都是一種類型。只是委託所代表的是一種被定義好原型的方法。
/// </summary>
public delegate void Mydeleg(string msg);
public class Program
{
static void Main(string[] args)
{
//執行個體化一個委託,也可以看成將一個委託和一個實際想要調用的方法關聯起來。
//其中new Mydeleg(GetMessage) 中的GetMessage是定義個方法的執行個體。你也可以將GetMessage換成GetMessage2
//原因稍後將要進一步的講解。
Mydeleg methodRef = new Mydeleg(GetMessage);
methodRef("The first message!");
Console.WriteLine("================================================");
//執行個體化message對象
Message message = new Message();
//設定message對象中的委託類型的成員變數。
message.deleg = new Mydeleg(SendMobilePhone);
//當調用這句的時候實際上在Send方法中附加了底下SendMobilePhone中包含的邏輯(發送方式的邏輯)。
message.Send("I love you");
Console.Read();
}
static void GetMessage(string msgInfo)
{
Console.WriteLine(msgInfo);
}
static void GetMessage2(string msgInfo2)
{
Console.WriteLine(msgInfo2);
}
static void SendMobilePhone(string msg)
{
//表示發送到手機上的邏輯。
Console.WriteLine(msg + " send to MobilePhone");
}
}
//==============================================================================================================
public class TestClass
{
public void GetMessage(string msg)
{
Console.WriteLine(msg);
}
}
//==============================================================================================================
/// <summary>
/// 假設這是一能夠發送資訊的類。我們可以通過這個類處理管理"資訊的各種處理“。
/// </summary>
public class Message
{
public Mydeleg deleg;
public void Send(string message)
{
//表示我在發送資訊前對資訊做一定的加工。
string result = "you have a message : " + message;
//然後我們需要將這個資訊發送。現在我在想一件事情。我要將資訊怎麼發送?發送到哪?
//發生資訊到手機, 那你需要在這裡編寫發送到手機上的代碼邏輯
//發送資訊到郵箱, 那你需要在這裡編寫發送到郵箱上的代碼邏輯
//發送資訊到QQ上, 那你需要在這裡編寫發送到QQ上的代碼邏輯
//或發送資訊到手機並且郵箱、QQ中,又是相應的邏輯。
//我還能列舉很多。你現在要解決的問題是如果在不改變這個類的前提下你如何將資訊發送到客戶需要發送的地方。
//我的想法是,使用委託。
if (deleg != null)
//調用這句你將發現實際是將外部定義的方法引用到這裡。使你的方法擁有了在外部定義發送邏輯的能力。
deleg(message);
}
}
}