委托是一个类,它定义了方法的类型,使得可以将方法转换成另一个方法的参数类进行传递,这种将方法动态给参数赋值的方法。可以再程序中避免大量使用(IF-ELSE、SWITCH),同时使得程序具有更好的扩展性。

winform下例程:

C#学习之路--线程与委托_Threading

GreetingManager文件如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace DelegateLearn
{
//class GreetingManager
//{

//}

//在GreetingManager类的内部声明Delegate1变量


//定义委托,它定义了可以代表的方法的类型
public delegate void GreetingDelegate(string name);
//新建的greetingmanager类
public class GreetingManager{
public GreetingDelegate delegate1;
public void GreetPeople(string name,GreetingDelegate MakeGreeting)
{
MakeGreeting(name);
}
}
//class Program{

//}
}


Form1.cs文件如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DelegateLearn;

namespace DelegateLearn
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private static void ChineseGreeting(string name)
{
Console.WriteLine("早上好," + name);
}
private static void EnglishGreeting(string name)
{
Console.WriteLine("Morning," + name);
}
private void button1_Click(object sender, EventArgs e)
{
GreetingManager gm = new GreetingManager();
//gm.GreetPeople("ThreeS Zhao", EnglishGreeting);
//gm.GreetPeople("赵", ChineseGreeting);

gm.delegate1 = EnglishGreeting;
gm.delegate1 += ChineseGreeting;


//GreetingDelegate delegate1;
//delegate1 = EnglishGreeting;
//delegate1 += ChineseGreeting;

gm.GreetPeople("ThreeS",gm.delegate1);
}
}
}

输出测试:


C#学习之路--线程与委托_C#_02