c语言编程笔录

首页 >   > 笔记大全

笔记大全

C#中的delegateeventEventHandlerActionFunc怎么使用

更新时间:2023-10-04

delegate

在C#中,delegate 是一种类型,用于封装具有相同参数列表和返回类型的方法。它提供了一种方式,可以在运行时动态地将方法作为参数传递或者存储到变量中。delegate 的声明与方法声明相似,只是使用了 delegate 关键字,并指定了方法的参数类型和返回类型。然后,可以通过实例化 delegate 类型的变量,将具体的方法赋值给这个变量,并通过调用 delegate 变量来调用被赋值的方法。

下面是一个使用 delegate 的示例:

using System;

delegate void MyDelegate(int num);

class Program
{
    static void Main(string[] args)
    {
        MyDelegate myDelegate = new MyDelegate(PrintNumber);
        myDelegate(10);
    }

    static void PrintNumber(int num)
    {
        Console.WriteLine("Number: " + num);
    }
}

event

在C#中,event 是一种特殊的 delegate,用于定义和触发事件。它是一种订阅/发布模式的实现方式,允许一个对象发布事件,而其他对象可以订阅并在事件发生时执行相应的处理逻辑。事件通常用于实现类之间的协作,尤其在GUI应用程序中非常常见。

为了定义和使用事件,需要声明一个 event 类型的字段,然后使用特殊的事件附加器语法来向事件添加和移除处理方法。事件的触发通常通过使用 protected virtual 关键字在类中定义一个触发方法来实现。

下面是一个使用 event 的示例:

using System;

delegate void MyEventHandler();

class EventPublisher
{
    public event MyEventHandler MyEvent;

    public void OnMyEvent()
    {
        if (MyEvent != null)
        {
            MyEvent();
        }
    }
}

class EventSubscriber
{
    static void Main(string[] args)
    {
        EventPublisher publisher = new EventPublisher();
        publisher.MyEvent += HandleMyEvent;
        publisher.OnMyEvent();
    }

    static void HandleMyEvent()
    {
        Console.WriteLine("Event handled!");
    }
}

EventHandler

EventHandler 是一种预定义的 delegate 类型,它是一个通用的、带有两个参数(发送者和事件参数)并且没有返回值的委托类型。它通常用来封装事件的处理方法。

EventHandler 定义的委托类型具有以下函数签名:

public delegate void EventHandler(object sender, EventArgs e);

其中,sender 参数表示事件的发送者,通常是触发事件的对象。EventArgs 则是预定义的无参数的事件参数类型,如果需要传递自定义的事件参数,可以创建一个继承自 EventArgs 的类。

下面是一个使用 EventHandler 的示例:

using System;

class EventPublisher
{
    public event EventHandler MyEvent;

    public void OnMyEvent()
    {
        if (MyEvent != null)
        {
            MyEvent(this, EventArgs.Empty);
        }
    }
}

class EventSubscriber
{
    static void Main(string[] args)
    {
        EventPublisher publisher = new EventPublisher();
        publisher.MyEvent += HandleMyEvent;
        publisher.OnMyEvent();
    }

    static void HandleMyEvent(object sender, EventArgs e)
    {
        Console.WriteLine("Event handled by " + sender);
    }
}

Action/Func

Action 和 Func 是两个泛型 delegate 类型,Action 类型表示一个无返回值的方法,可以有零到多个参数。而 Func 类型则表示一个有返回值的方法,最后一个泛型参数表示返回值类型,其他参数表示方法的参数类型。

Action 和 Func 是预定义的泛型 delegate 类型,可以根据需要指定不同的参数类型和返回类型,非常灵活。它们通常用于将方法作为参数传递给其他方法,或者用于定义和处理回调。

下面是一个使用 Action 和 Func 的示例:

using System;

class Program
{
    static void Main(string[] args)
    {
        Action printNumber = number => Console.WriteLine("Number: " + number);
        printNumber(10);

        Func addNumbers = (a, b) => a + b;
        int sum = addNumbers(2, 3);
        Console.WriteLine("Sum: " + sum);
    }
}

总结

delegate 是一种类型,用于封装具有相同参数列表和返回类型的方法,可以动态地传递和存储方法。

event 是一种特殊的 delegate,用于定义和触发事件,通常用于实现类之间的协作。

EventHandler 是一种预定义的 delegate 类型,用于封装事件的处理方法。

Action 和 Func 是两个泛型 delegate 类型,用于表示无返回值和有返回值的方法,可以根据需要指定参数类型和返回类型。

这些功能在C#中提供了灵活和强大的机制,使得可以更好地编写可扩展和可维护的代码。