Loading... <p style="font-size:16px">这几个开发的概念对于我们这种非科班出身的人来说很难理解。我尝试用更通俗点的方式讲解记录一下。</p> <p style="font-size:16px">委托(Delegate)是一种引用方法的类型。它提供了一种将方法作为参数传递给其他方法的方式。</p> <p style="font-size:16px">事件(Event)是一种特殊的委托类型,它是成员方法的一种包装,用于在发生某些事情时提供通知。事件使用<em>event</em>关键字声明,并且通常与委托类型结合使用。</p> <p style="font-size:16px">为什么要使用委托,假设我们现在有两个类A和B,在A中调用到了B,B中发生的一些事情要想让A知道,就需要把东西抛出来给到A,A接收并及时作出反应。</p> <blockquote class="wp-block-quote"><!-- wp:paragraph {"style":{"typography":{"fontSize":"16px"}}} --> <p style="font-size:16px">使用事件和委托可以提高代码的可维护性和可扩展性。它们允许你编写在运行时可以响应特定事件的代码,而不必修改现有代码。这种方式也有助于实现松耦合的设计,使得不同的组件可以独立地工作和变化。</p> </blockquote> <p></p> <p style="font-size:16px"><em><strong>下面写个最简单的例子。B中的特定代码位置发布一条Message给A,A来进行下一步处理。</strong></em></p> <p style="font-size:16px">在B类里定义一个委托,和这个委托对应的事件。</p> <p style="font-size:16px">然后在B类所需要的位置唤起这个事件,这就是所谓的发布。</p> ``` public class B { //定义委托 public delegate void SendMessage(string value); //定义事件 public static event SendMesaage OnSnedMessage; //在某个逻辑中出发事件,称之为发布 private void PublishSendMessage() { OnSendMessage?.Invoke("Test Publish Message"); } } ``` <p style="font-size:16px">在A里我们需要定义一个方法来接受和处理B发布过来的信息,然后订阅B类的这个事件。</p> <p style="font-size:16px">我下面的代码示例B类是个静态类,不需要实例化,所以在A类的构造函数里添加订阅。如果B是个实例类,那就需要在实例化后添加订阅。</p> ``` public class A { //订阅B类中的事件,并唤起A类中的一个方法 public A() { B.OnSendMessage += ReceiveMessage; } //定义一个方法来接收和处理B类发布过来的信息 private void ReceiveMessage(string message) { Console.WriteLine(message); } } ``` <p style="font-size:16px"><strong>我们在S3D的二次开发中,有些API只能在启动类中调用,如果你们用到了一些辅助的类或Form想调用这些API就需要用到委托的写法。如WriteStatusBar这个方法。</strong></p> 最后修改:2025 年 03 月 14 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏