示例代码:
namespace ConsoleApp1
{
//定义委托,它定义了可以代表的方法的类型
public delegate void GreetingDelegate(string name);
class Program
{
public static void GreetPeople(string name, GreetingDelegate MakeGreeting)
{
MakeGreeting(name);
}
public static void ChineseGreeting(string name)
{
Console.WriteLine("你好, " + name);
}
public static void EnglishGreeting(string name)
{
Console.WriteLine("Hello, " + name);
}
public static void Main(string[] args)
{
GreetPeople("daixiang", EnglishGreeting);
GreetPeople("戴翔", ChineseGreeting);
}
}
}
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If … Else(Switch)语句,同时使得程序具有更好的可扩展性。
可以将多个方法赋给同一个委托,或者叫将多个方法绑定到同一个委托,当调用这个委托的时候,将依次调用其所绑定的方法。
public static void Main(string[] args)
{
GreetingDelegate delegate1;
delegate1 = EnglishGreeting;
delegate1 += ChineseGreeting;
GreetPeople("daixiang",delegate1);
Console.ReadKey();
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
public delegate void GreetingDelegate(string name);
class Program
{
//定义委托,它定义了可以代表的方法的类型
public static void GreetPeople(string name, GreetingDelegate MakeGreeting)
{
MakeGreeting(name);
}
public static void ChineseGreeting(string name)
{
Console.WriteLine("你好, " + name);
}
public static void EnglishGreeting(string name)
{
Console.WriteLine("Hello, " + name);
}
public static void Main(string[] args)
{
// 方法一
GreetPeople("daixiang", EnglishGreeting);
GreetPeople("戴翔", ChineseGreeting);
// 方法二
GreetingDelegate delegate1;
delegate1 = EnglishGreeting;
delegate1 += ChineseGreeting;
GreetPeople("daixiang",delegate1);
Console.ReadKey();
}
}
}
输出结果: