C#中的委托和调用----2

55 阅读1分钟

委托的调用和委托数组

委托的调用

  1. 可以像调用方法一样调用委托
  2. 用来调用委托的参数,将会被用来调用调用列表中的每一个方法
  3. 如果一个委托对象只包含一个方法的引用,调用委托与直接调用方法效果相同。
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();
        }
    }