c#基础知识合集17 委托
·
- 委托的定义与概念
- 委托是一种类型安全的函数指针,它允许将方法作为参数传递给其他方法,或者将方法存储在变量中。通过委托,可以实现回调机制,使得代码更加灵活和可扩展。在 C# 中,委托是一种引用类型。
- 例如,定义一个简单的委托类型
MyDelegate,它可以指向一个接受两个整数参数并返回整数的方法:
public delegate int MyDelegate(int a, int b);
- 委托的声明与使用
- 声明委托变量:声明一个委托类型的变量,用于存储特定方法的引用。
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}");
}
}
- 多播委托
- 多播委托是指一个委托变量可以同时引用多个方法。当调用多播委托时,会按照添加方法的顺序依次调用这些方法。
- 使用
+=运算符向委托变量添加方法,使用-=运算符从委托变量移除方法。 - 示例:
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 被调用”。
- 委托的用途
- 事件处理:委托是实现事件机制的基础。例如,Windows Forms 编程中,按钮的点击事件就是通过委托来实现的。当按钮被点击时,会调用预先注册在委托中的方法(事件处理程序)。
- 回调函数:在异步编程中,委托常用于实现回调函数。当异步操作完成时,系统会调用注册的回调方法,告知调用者操作已完成。
- 代码解耦:通过委托,可以将方法的实现与调用分离,提高代码的可维护性和可扩展性。例如,在一个排序算法中,可以通过委托传入不同的比较方法,实现不同的排序逻辑,而不需要修改排序算法的核心代码。
更多推荐

所有评论(0)