C# 委托 (Delegate) 是一种引用类型,用于声明方法的类型。类似于 C/C++ 中的函数指针,委托允许将方法作为参数传递给其他方法。这使得我们可以在运行时动态绑定方法并执行它们。

委托示例:

// 定义委托
delegate void MyDelegate(string message);

// 定义一个类,包含一个方法,其参数为委托类型
class MyClass
{
    public void MyMethod(string message)
    	{
        Console.WriteLine('传入的消息为:' + message);
    }
}

class Program
{
    static void Main(string[] args)
    {
        // 实例化委托,并将MyMethod方法绑定到委托实例
        MyDelegate del = new MyDelegate(new MyClass().MyMethod);

        // 调用委托
        del('Hello, World!');
    }
}

输出结果为:传入的消息为:Hello, World!

在这个例子中,我们首先定义了一个委托 MyDelegate,它接受一个字符串参数并不返回任何值。然后,我们创建了一个包含 MyMethod 方法的类 MyClass。在 Main 方法中,我们实例化了委托,并将 MyMethod 绑定到委托上。最后,我们通过调用委托来执行 MyMethod 方法。

事件 (Event) 是委托的一种特殊用法,它提供了一种基于观察者模式的方式来处理对象间的通信。事件可以用于在程序中传递消息、触发操作或通知其他对象。

事件示例:

// 声明事件的委托类型
delegate void MyEventHandler(string message);

// 包含事件的类
class MyClass
{
    // 声明事件
    public event MyEventHandler MyEvent;

    // 触发事件的方法
    public void TriggerEvent()
    {
        // 触发事件
        MyEvent?.Invoke('Event triggered!');
    }
}

class Program
{
    static void Main(string[] args)
    {
        // 创建一个实例
        MyClass obj = new MyClass();

        // 订阅事件
        obj.MyEvent += HandleEvent;

        // 触发事件
        obj.TriggerEvent();
    }

    // 事件处理程序
    static void HandleEvent(string message)
    {
        Console.WriteLine('事件处理程序收到消息:' + message);
    }
}

输出结果为:事件处理程序收到消息:Event triggered!

在这个例子中,我们首先声明了一个事件的委托类型 MyEventHandler。然后,我们在 MyClass 类中声明了一个事件 MyEvent,它是基于 MyEventHandler 委托类型的。在 Main 方法中,我们创建了 MyClass 的实例,并使用 += 运算符将 HandleEvent 方法订阅到事件上。最后,我们通过调用 TriggerEvent 方法来触发事件,并触发了订阅的事件处理程序。

希望这个简介对你有所帮助!如有任何进一步的问题,请随时提问。


原文地址: https://www.cveoy.top/t/topic/bp68 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录