C#委托(delegate)

概念:

委托(delegate):是一种引用类型的变量,用于存储某个方法的引用地址
C#中的委托(Delegate)是一种类型安全的对象,它可以存储对一个或多个方法的引用。委托可以像其他类型一样作为参数传递给方法,也可以用于回调函数和事件处理程序等场景。

委托的基本语法如下所示:

delegate returnType DelegateName(parameterList);

其中,returnType是委托所引用方法的返回类型,DelegateName是委托的名称,parameterList是委托所引用方法的参数列表。

委托的使用步骤如下:
1.声明委托类型:根据需要定义一个委托类型,在其中指定返回类型和参数列表。可以在类的内部或外部声明委托类型

delegate int CalculationDelegate(int a, int b);

2.创建委托对象:使用委托类型创建委托对象,可以使用构造函数或简化的语法

CalculationDelegate addDelegate = new CalculationDelegate(Add);

3.定义方法:定义与委托类型相匹配的方法,该方法的返回类型和参数列表必须与委托所引用的方法一致

int Add(int a, int b)
{
    
    
    return a + b;
}

4.调用委托:通过调用委托对象来执行委托所引用的方法

int result = addDelegate(5, 3);

委托可以引用单个方法,也可以引用多个方法。当委托引用多个方法时,称为多播委托(Multicast Delegate)。可以使用+=运算符将多个方法添加到委托中,使用-=运算符从委托中移除方法。

下面是一个多播委托的示例:

delegate void MessageDelegate(string message);

void PrintMessage(string message)
{
    
    
    Console.WriteLine("Printing: " + message);
}

void LogMessage(string message)
{
    
    
    Console.WriteLine("Logging: " + message);
}

MessageDelegate messageDelegate = PrintMessage;
messageDelegate += LogMessage;

messageDelegate("Hello"); // 调用所有引用的方法

除了普通委托,C#还提供了一些特殊的委托类型,如Action和Func。Action委托用于引用不返回值的方法,而Func委托用于引用具有返回值的方法。

例如,Action委托的声明如下(无返回值):

delegate void Action();

Func委托的声明如下(有返回值):

delegate TResult Func<out TResult>();
delegate TResult Func<in T, out TResult>(T arg);

C#委托编写一个回调函数

首先,声明一个委托类型,用于定义回调函数的签名:

delegate void CallbackDelegate(string message);

然后,编写一个接受委托作为参数的方法,该方法在完成某个操作后调用回调函数:

void PerformOperation(int value, CallbackDelegate callback)
{
    
    
    // 模拟某个操作
    int result = value * 2;
    if(callback!=null{
    
    
     // 调用回调函数
    callback("操作结果为:" + result);
    }
   
}

接下来,编写一个回调函数的具体实现:

void MyCallbackFunction(string message)
{
    
    
    Console.WriteLine("回调函数被调用:" + message);
}

最后,在主程序中调用PerformOperation方法,将回调函数作为参数传递进去:

//把MyCallbackFunction方法的引用地址赋值给CallbackDelegate 委托类型的变量
CallbackDelegate callbackDelegate = new CallbackDelegate(MyCallbackFunction);
//执行操作方法,在方法里面调用委托
PerformOperation(5, callbackDelegate);

运行程序,将会输出以下结果:

回调函数被调用:操作结果为:10

在这个示例中,我们定义了一个CallbackDelegate委托类型,它接受一个string类型的参数并且没有返回值。然后,我们编写了一个PerformOperation方法,该方法接受一个整数值和一个回调函数作为参数,并在执行某个操作后调用回调函数。最后,我们定义了一个MyCallbackFunction方法来实现回调函数的具体逻辑。在主程序中,我们创建了一个callbackDelegate委托对象,并将其作为参数传递给PerformOperation方法,从而实现了回调函数的调用。
这个示例展示了如何使用委托来实现回调函数,通过将委托对象作为参数传递给方法,可以在方法执行完毕后调用回调函数进行后续处理。

委托在C#中被广泛应用于事件处理、异步编程、LINQ和回调函数等场景。通过使用委托,可以实现代码的解耦和可扩展,并提高代码的可读性和可维护性

猜你喜欢

转载自blog.csdn.net/qq_41942413/article/details/132614297