C#委托方法的添加和移除----3

40 阅读1分钟

委托上方法的添加和移除

组合委托

方式1:委托可以用“+”运算符来组合,这个运算最终会创建一个新的委托,其调用列表连接了作为操作数的两个委托的调用列表副本。

MyDel delA=myInstObj.MyM1;
MyDel delB=SClass.OtherM2;
MyDel delC=delA+delB;
 //组合委托
            GreetingDelegate greetingDelegate9 = greetingDelegate1 + greetingDelegate2;
            greetingDelegate9("xiaozhou");
            Console.Read();

方式2:委托可以用"+="运算符

实际上创建了一个新的委托,其调用列表是左边的委托加上右边方法的组合。然后将这个新的委托重新赋值给原委托变量。此时,原委托变量就指向了一个全新的委托。

  //持有的是实例类方法
            greetingDelegate1 += everyDayGreeting.MorningGreeting;
            greetingDelegate1 += everyDayGreeting.NightGreeting;
            greetingDelegate1 += FestivalGreeting.NewYearGreeting;
            greetingDelegate1 += FestivalGreeting.ChrismasGreeting;
            greetingDelegate1("tangbohu");

注意:如果一个方法在调用列表中出现多次,当委托被调用时,每次在列表中遇到该方法时,它都会被调用一次。

从委托中移除方法

使用"-="运算符,与增加委托相同。

如果调用列表中同一方法有多个,-=运算符将从列表末尾开始搜索,并且移除第一个相匹配的方法。

试图移除委托中不存在的方法没有效果

试图调用空委托会抛出异常,所谓空委托是委托变量没有任何的方法持有,即null。

所以在调用委托时,判空是必要的。

 if (greetingDelegate1 == null)
            {
                Console.WriteLine("greetingDelegate1为空");
            }
            else 
            {
                greetingDelegate1("Jack!");
            }