0Pricing
C# Academy · 课时

委托和事件

学习委托和事件如何实现 C# 对象之间的通信

委托和事件 是 CoddyKit 上的免费 C# Academy 课时。 这是第 5 节课,共 6 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C# Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C# Academy 课程共包含 6 节课。

委托和事件

委托和事件

欢迎来到下一课!在本课中,您将了解 C# 中的委托和事件、它们的用途,以及它们如何实现事件驱动编程。让我们开始吧!

委托和事件 — 插图 1

什么是委托?

什么是委托?

delegate 是一种表示方法引用的类型。它允许将方法作为参数传递,并动态调用方法。

要点:委托对于在 C# 中实现事件和回调函数至关重要。

定义和使用委托

定义和使用委托

要定义委托,请使用 delegate 关键字。示例:

using System;

class Program {
    // Define a delegate
    public delegate void MessageDelegate(string message);

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

    static void Main() {
        // Create a delegate instance
        MessageDelegate msg = DisplayMessage;

        // Invoke the delegate
        msg("Hello, Delegates!");
    }
}

多播委托

多播委托

单个委托可以指向多个方法,并且所有方法都会按顺序调用。示例:

提示:当需要执行多个操作时,请使用多播委托。

using System;

class Program {
    public delegate void MessageDelegate(string message);

    static void ShowMessage(string message) {
        Console.WriteLine("Message: " + message);
    }

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

    static void Main() {
        MessageDelegate msg = ShowMessage;
        msg += LogMessage; // Add another method

        msg("Hello, Multicast Delegates!"); // Both methods are invoked
    }
}

什么是事件?

什么是事件?

event 是一种机制,当某个类或对象感兴趣的事情发生时,它可以通知其他类或对象。事件建立在委托之上。

要点:在事件驱动编程中,事件可以实现发布者和订阅者之间的松耦合。

定义和使用事件

定义和使用事件

要定义事件,请将 event 关键字与委托类型结合使用。示例:

要点:事件可以帮助您构建响应式和事件驱动的系统。

using System;

class Publisher {
    public delegate void NotifyDelegate(string message);
    public event NotifyDelegate Notify; // Define an event

    public void RaiseEvent(string message) {
        Notify?.Invoke(message); // Invoke the event
    }
}

class Subscriber {
    public void OnNotify(string message) {
        Console.WriteLine("Subscriber received: " + message);
    }
}

class Program {
    static void Main() {
        Publisher pub = new Publisher();
        Subscriber sub = new Subscriber();

        pub.Notify += sub.OnNotify; // Subscribe to the event
        pub.RaiseEvent("Hello, Events!"); // Raise the event
    }
}

取消订阅事件

取消订阅事件

订阅者可以使用 -= 运算符。示例:

提示:请务必取消订阅事件,以避免内存泄漏。

using System;

class Publisher {
    public delegate void NotifyDelegate(string message);
    public event NotifyDelegate Notify;

    public void RaiseEvent(string message) {
        Notify?.Invoke(message);
    }
}

class Subscriber {
    public void OnNotify(string message) {
        Console.WriteLine("Subscriber received: " + message);
    }
}

class Program {
    static void Main() {
        Publisher pub = new Publisher();
        Subscriber sub = new Subscriber();

        pub.Notify += sub.OnNotify; // Subscribe
        pub.RaiseEvent("First Message");

        pub.Notify -= sub.OnNotify; // Unsubscribe
        pub.RaiseEvent("Second Message"); // No output, as subscriber is removed
    }
}

练习挑战

练习挑战

为算术运算创建一个委托 CalculationDelegate 和一个事件 OnCalculate。编写一个引发该事件并执行计算的程序。示例:

using System;

class Calculator {
    public delegate void CalculationDelegate(double result);
    public event CalculationDelegate OnCalculate;

    public void Add(double a, double b) {
        double result = a + b;
        OnCalculate?.Invoke(result);
    }
}

class Program {
    static void Main() {
        Calculator calc = new Calculator();

        // Subscribe to the event
        calc.OnCalculate += result => Console.WriteLine("Result: " + result);

        calc.Add(5, 3); // Outputs: Result: 8
    }
}

太棒了!

太棒了!

恭喜您!您已经学会了如何使用委托和事件构建动态的事件驱动程序。在下一课中,我们将探索如何使用列表、字典和队列等集合。让我们继续编写代码吧!

委托和事件 — 插图 10

常见问题解答

「委托和事件」课时是免费的吗?

是的 — 「委托和事件」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C# Academy 课程的其余内容,请升级到 CoddyKit PRO。 C# Academy 课程共包含 6 节课。

「委托和事件」这节课中我会学到什么?

学习委托和事件如何实现 C# 对象之间的通信 你通过在浏览器中直接运行的动手代码来练习 C# Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 C# Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 C# Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 5 节课,共 6 节。

「委托和事件」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 C# Academy 课中编写并运行代码吗?

能。每节 C# Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 接口入门
  2. 抽象类
  3. 静态成员和方法
  4. 探索枚举和结构体
  5. 委托和事件
  6. 使用集合:列表、字典和队列
← 返回 C# Academy