委托的调用和委托数组
委托的调用
- 可以像调用方法一样调用委托
- 用来调用委托的参数,将会被用来调用调用列表中的每一个方法
- 如果一个委托对象只包含一个方法的引用,调用委托与直接调用方法效果相同。
static void Main(string[] args)
{
//创建日常问候类的对象
EveryDayGreeting everyDayGreeting = new EveryDayGreeting();
//声明委托类型对象,并将其持有的实例类方法赋值给委托变量
GreetingDelegate greetingDelegate = new GreetingDelegate(everyDayGreeting.MorningGreeting);
//重新持有引用
//通过赋值来改变包含在委托变量中的引用,旧的委托对象会被垃圾回收器回收,每一次赋值操作都会重新创建一个新的委托对象
greetingDelegate = FestivalGreeting.NewYearGreeting;
}
委托数组
//声明委托类
public delegate void GreetingDelegate(string name);
internal class Program
{
static void Main(string[] args)
{
//采用new关键字创建委托实例
EveryDayGreeting everyDayGreeting = new EveryDayGreeting();
//1.持有实例类方法
//声明委托类型对象,并将其包含的方法引用赋值给委托变量
GreetingDelegate greetingDelegate1 = new GreetingDelegate(everyDayGreeting.MorningGreeting);
GreetingDelegate greetingDelegate2 = new GreetingDelegate(everyDayGreeting.NightGreeting);
//2.持有静态类方法
GreetingDelegate greetingDelegate3 = new GreetingDelegate(FestivalGreeting.ChrismasGreeting);
GreetingDelegate greetingDelegate4 = new GreetingDelegate(FestivalGreeting.NewYearGreeting);
//采用方法名创建委托实例
//3.持有实例类方法
GreetingDelegate greetingDelegate5 = everyDayGreeting.MorningGreeting;
GreetingDelegate greetingDelegate6 = everyDayGreeting.NightGreeting;
//持有静态类方法
GreetingDelegate greetingDelegate7 = FestivalGreeting.NewYearGreeting;
GreetingDelegate greetingDelegate8 = FestivalGreeting.ChrismasGreeting;
//委托数组
GreetingDelegate[] greetingDelegates = {
greetingDelegate1,greetingDelegate2,greetingDelegate3,
greetingDelegate4,greetingDelegate5,greetingDelegate6,
greetingDelegate7,greetingDelegate8
};
for (int i = 0; i < greetingDelegates.Length; i++)
{
greetingDelegates[i]("XiaoHuHU");
}
Console.Read();
}
}