导读:本期聚焦于小伙伴创作的《C#怎么使用委托和事件 C# delegate与event编程方法》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#怎么使用委托和事件 C# delegate与event编程方法》有用,将其分享出去将是对创作者最好的鼓励。

在C#编程中,委托和事件是实现回调、消息通知等逻辑的重要机制,两者紧密相关但又有不同的适用场景,理解它们的用法能帮助我们写出更解耦、扩展性更强的代码。

C#怎么使用委托和事件 C# delegate与event编程方法

委托的基础概念与使用

委托是一种类型,它可以存储对一个或多个方法的引用,相当于一个方法指针的容器。使用委托需要先声明委托类型,再创建委托实例并绑定方法,最后调用委托执行绑定的方法。

委托的声明与实例化

声明委托需要指定返回值类型和参数列表,格式和定义方法类似,只是多了delegate关键字。示例如下:

// 声明一个无返回值、带一个string参数的委托类型
public delegate void MessageDelegate(string msg);

class Program
{
    // 定义和委托签名匹配的方法
    static void PrintMessage(string content)
    {
        Console.WriteLine($"打印内容:{content}");
    }

    static void Main()
    {
        // 实例化委托,绑定PrintMessage方法
        MessageDelegate del = new MessageDelegate(PrintMessage);
        // 调用委托,执行绑定的方法
        del("Hello Delegate");
    }
}

委托的多播特性

委托支持绑定多个方法,调用时会按照绑定顺序依次执行所有方法,这就是多播委托。可以通过+=添加方法,-=移除方法。

public delegate void CalculateDelegate(int a, int b);

class Calculator
{
    public static void Add(int x, int y)
    {
        Console.WriteLine($"加法结果:{x + y}");
    }

    public static void Multiply(int x, int y)
    {
        Console.WriteLine($"乘法结果:{x * y}");
    }
}

class Program
{
    static void Main()
    {
        CalculateDelegate calDel = Calculator.Add;
        // 添加Multiply方法到委托
        calDel += Calculator.Multiply;
        // 调用委托,会依次执行Add和Multiply
        calDel(3, 5);
        // 移除Add方法
        calDel -= Calculator.Add;
        Console.WriteLine("移除Add后执行:");
        calDel(2, 4);
    }
}

事件的基础概念与使用

事件是基于委托的封装,它限制了委托的外部操作权限,只能在声明事件的类内部触发,外部只能进行订阅和取消订阅操作,这样可以避免外部随意调用委托导致逻辑混乱。

事件的声明与订阅

事件需要在委托类型的基础上声明,通常配合event关键字使用,一般遵循“发布-订阅”模式,即一个类发布事件,其他类订阅事件并定义响应逻辑。

// 定义事件用的委托类型
public delegate void TemperatureChangeDelegate(int currentTemp);

// 温度发布者类
class TemperatureMonitor
{
    // 声明温度改变事件
    public event TemperatureChangeDelegate TemperatureChanged;

    private int _temperature;
    public int Temperature
    {
        get { return _temperature; }
        set
        {
            _temperature = value;
            // 只有类内部可以触发事件
            OnTemperatureChanged(_temperature);
        }
    }

    // 触发事件的受保护方法
    protected virtual void OnTemperatureChanged(int temp)
    {
        // 判断事件是否有订阅者,避免空引用
        TemperatureChanged?.Invoke(temp);
    }
}

// 温度订阅者类
class TemperatureAlert
{
    public void OnTemperatureChanged(int temp)
    {
        if (temp > 30)
        {
            Console.WriteLine($"当前温度{temp}℃,超过阈值,触发高温警报");
        }
    }
}

class Program
{
    static void Main()
    {
        TemperatureMonitor monitor = new TemperatureMonitor();
        TemperatureAlert alert = new TemperatureAlert();
        // 订阅事件
        monitor.TemperatureChanged += alert.OnTemperatureChanged;
        // 修改温度,触发事件
        monitor.Temperature = 25;
        monitor.Temperature = 32;
        // 取消订阅
        monitor.TemperatureChanged -= alert.OnTemperatureChanged;
        monitor.Temperature = 35;
    }
}

委托与事件的区别

很多开发者会混淆委托和事件,两者的核心区别如下:

  • 委托是一种类型,事件是基于委托的成员变量,属于类的成员。
  • 委托可以在类外部直接调用、赋值,事件只能在声明它的类内部触发,外部只能通过+=-=操作。
  • 事件的设计目的是限制外部对委托的随意操作,保证事件触发的逻辑由发布者控制,更符合封装原则。

实际应用场景

委托和事件在C#开发中有很多常见应用场景:

  • 回调逻辑:比如异步操作完成后通过委托通知调用方结果。
  • 消息通知:比如UI控件的点击事件、状态改变通知,都是基于事件实现的。
  • 插件扩展:通过定义统一的委托或事件接口,允许外部插件订阅核心逻辑的事件,实现功能扩展。

掌握委托和事件的使用方法,能帮助我们更好地处理对象之间的通信逻辑,减少代码之间的强耦合,提升程序的可维护性和扩展性。

delegateevent委托事件C#_编程修改时间:2026-06-26 19:06:27

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。