1. 委托的定义与概念
    • 委托是一种类型安全的函数指针,它允许将方法作为参数传递给其他方法,或者将方法存储在变量中。通过委托,可以实现回调机制,使得代码更加灵活和可扩展。在 C# 中,委托是一种引用类型。
    • 例如,定义一个简单的委托类型 MyDelegate,它可以指向一个接受两个整数参数并返回整数的方法:
public delegate int MyDelegate(int a, int b);
  1. 委托的声明与使用
    • 声明委托变量:声明一个委托类型的变量,用于存储特定方法的引用。
MyDelegate myDelegate;
  • 定义目标方法:定义符合委托签名的方法,即方法的参数列表和返回类型与委托定义一致。
public static int Add(int a, int b)
{
    return a + b;
}

public static int Multiply(int a, int b)
{
    return a * b;
}
  • 实例化委托:将委托变量与目标方法关联起来。
myDelegate = Add;
  • 调用委托:通过委托变量调用关联的方法,就像调用普通方法一样。
int result = myDelegate(3, 5);
Console.WriteLine($"结果: {result}");
  • 完整示例
public delegate int MyDelegate(int a, int b);

class Program
{
    public static int Add(int a, int b)
    {
        return a + b;
    }

    public static int Multiply(int a, int b)
    {
        return a * b;
    }

    static void Main()
    {
        MyDelegate myDelegate;
        myDelegate = Add;
        int result1 = myDelegate(3, 5);
        Console.WriteLine($"加法结果: {result1}");

        myDelegate = Multiply;
        int result2 = myDelegate(3, 5);
        Console.WriteLine($"乘法结果: {result2}");
    }
}
  1. 多播委托
    • 多播委托是指一个委托变量可以同时引用多个方法。当调用多播委托时,会按照添加方法的顺序依次调用这些方法。
    • 使用 += 运算符向委托变量添加方法,使用 -= 运算符从委托变量移除方法。
    • 示例:
public delegate void MyVoidDelegate();

class Program
{
    public static void Method1()
    {
        Console.WriteLine("Method1 被调用");
    }

    public static void Method2()
    {
        Console.WriteLine("Method2 被调用");
    }

    static void Main()
    {
        MyVoidDelegate myDelegate = Method1;
        myDelegate += Method2;

        myDelegate();
    }
}
  • 在上述示例中,myDelegate 是一个多播委托,它先引用 Method1,然后通过 += 运算符添加了 Method2。当调用 myDelegate() 时,会依次输出 “Method1 被调用” 和 “Method2 被调用”。
  1. 委托的用途
    • 事件处理:委托是实现事件机制的基础。例如,Windows Forms 编程中,按钮的点击事件就是通过委托来实现的。当按钮被点击时,会调用预先注册在委托中的方法(事件处理程序)。
    • 回调函数:在异步编程中,委托常用于实现回调函数。当异步操作完成时,系统会调用注册的回调方法,告知调用者操作已完成。
    • 代码解耦:通过委托,可以将方法的实现与调用分离,提高代码的可维护性和可扩展性。例如,在一个排序算法中,可以通过委托传入不同的比较方法,实现不同的排序逻辑,而不需要修改排序算法的核心代码。

更多推荐