《C#图解教程(第五版)》- 14.8 从委托移除方法

我们还可以使用-=运算符从委托移除方法。与为委托添加方法一样,从委托移除方法其实是创建了一个新的委托。新的委托是旧委托的副本。移除委托时需要记住以下事项:

  • 如果在调用列表中的方法有多个实例,-=运算符将从列表最后开始搜索,并且移除第一个与方法匹配的实例。
  • 试图删除委托中不存在的方法将无效。
  • 试图调用空委托会抛出异常。

示例:下面代码是从委托移除了一个方法

using System;

namespace ConsoleApp5
{
    //声明委托类型
    delegate void MyDel(int x);

    class inst
    {
        //实例方法
        public void MyM1(int x)
        {
            Console.WriteLine($"Print MyDel:{x}");
        }
    }

    class SCl
    {
        //静态方法
        public static void m3(int x)
        {
            Console.WriteLine($"Print m3:{x*2}");
        }
    }

    class X
    {
        //静态方法
        public static void Act(int x)
        {
            Console.WriteLine($"Print Act:{x*3}");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            //委托中使用的是实例方法,则需要通过类的实例来调用方法,即使用“new 类名 (). 方法名”的形式。
            MyDel delVar = new MyDel(new inst().MyM1);
            
            //增加方法
            delVar += SCl.m3;

            //增加方法
            delVar += X.Act;

            //从委托移除方法m3
            delVar -= SCl.m3;

            //调用委托
            delVar(3);          
            
        }
    }
}

执行上面的代码,效果如下图所示。

未经允许不得转载:透视数据 » 《C#图解教程(第五版)》- 14.8 从委托移除方法