Bootstrap

人生低谷来撸C#-016 委托(Delegate)

在 C# 中,委托(Delegate)是一个非常重要的概念,它用于处理事件和回调函数。通俗地说,委托就像是一个函数的引用,通过这个引用,你可以调用具体的函数。

1、委托的基本概念

  1. 定义:委托是一个类型,它定义了函数的签名(参数类型和返回类型)。
  2. 实例化:你需要创建一个委托实例,这个实例指向一个具体的函数。
  3. 调用:通过委托实例,你可以调用与之关联的函数。

2、委托的使用步骤

      1、定义委托    

public delegate void MyDelegate(string message);

          这里定义了一个名为 MyDelegate 的委托,它接受一个 string 参数,并且没有返回值。

      2、声明方法

public void ShowMessage(string message) { Console.WriteLine(message); }

         这是一个普通的方法,它接受一个 string 参数并打印出来。委托声明决定了可由该委托引用的方法。委托可指向一个与其具有相同标签的方法。

        一旦声明了委托类型,委托对象必须使用 new 关键字来创建,且与一个特定的方法有关。当创建委托时,传递到 new 语句的参数就像方法调用一样书写,但是不带有参数。

      3、实例化委托

MyDelegate del = new MyDelegate(ShowMessage);

       创建了一个 MyDelegate 实例,并且让它指向 ShowMessage 方法。

     4、调用委托

del("Hello, Delegate!");

通过委托实例 del 调用 ShowMessage 方法。

3、更简洁的语法

在现代 C# 中,我们通常使用匿名方法和 Lambda 表达式来简化委托的创建和使用。

// 使用匿名方法 
MyDelegate del1 = delegate(string message) 
{
 Console.WriteLine(message); 
}; 
// 使用 Lambda 表达式 
MyDelegate del2 = (message) =>
 { Console.WriteLine(message);
 };

4、委托的应用场景

  1. 事件处理:在事件驱动的编程中,委托用于注册事件处理器。例如,按钮的点击事件。
  2. 回调函数:在异步编程中,委托用于指定完成某个操作后的回调函数。
  3. 策略模式:在设计模式中,委托可以用来实现策略模式,允许在运行时选择不同的算法。

5、示例:事件处理

public class Button
{
    public event MyDelegate ClickEvent;

    public void SimulateClick()
    {
        if (ClickEvent != null)
        {
            ClickEvent("Button clicked!");
        }
    }
}

public class Program
{
    public static void Main()
    {
        Button button = new Button();

        // 注册事件处理器
        button.ClickEvent += ShowMessage;

        // 模拟按钮点击
        button.SimulateClick();
    }

    public static void ShowMessage(string message)
    {
        Console.WriteLine(message);
    }
}

在这个示例中,Button 类有一个 ClickEvent 事件,它是一个 MyDelegate 类型的委托。当我们调用 SimulateClick 方法时,会触发 ClickEvent 事件,从而调用与之关联的 ShowMessage 方法

6、关于PLC编程

自动化的朋友,就会自然的理解到块的概念,块写好后,就是可以调运,这个里面的调用可以理解成C#的委托,引用这个块,这个块里的逻辑去处理类似的事情。

;