为了账号安全,请及时绑定邮箱和手机立即绑定

教我们如何使用 Delegate 并在 C# 中引发事件

教我们如何使用 Delegate 并在 C# 中引发事件

C#
守着一只汪 2022-12-31 10:25:05
我有 2 个类,Printer 和 MessageOrigin。打印机实例化 MessageOrigin。在 MessageOrigin 类中,我可以获得我需要的消息,但我必须将其返回给 Printer 类,以便将其写入控制台。我想我必须使用 Delegate 和 Event Raiser 来做到这一点。那里有很多教程和解释,但真的很难理解它,更不用说实施它了。可能通过解决我在这里遇到的问题会让你更容易理解如何使用它。请看下面我的示例代码,教我们如何在 C# 中使用委托和引发事件。Class Printer{    MessageOrigin mo = new MessageOrigin();    printMessage(string message) {        console.WriteLine(message) // message here should come from the MessageOrigin class    }}class MessageOrigin{    public void GetMessage() {        var msgs = Get_All_Message();        SendMessageToPrintClass(msgs);    }    public void SendMessageToPrintClass(string message) {        // how do I send the "message" parameter back to the Printer class    }}感谢您的耐心等待。
查看完整描述

2 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

您可以使用事件。该类MessageOrigin将是发布者,该类Printer将是订阅者。优点是以后您可以添加更多订阅者,而无需更改类MessageOrigin

class Printer

{

    MessageOrigin mo = new MessageOrigin();


    public Printer()

    {

        mo.NewMessage += PrintMessage; // Subscribe to the event

    }


    void PrintMessage(string message)

    {

        Console.WriteLine(message);

    }

}


class MessageOrigin

{

    public event Action<string> NewMessage; // Declare the event


    public void GetMessage()

    {

        string msgs = Get_All_Message();

        NewMessage?.Invoke(msgs); // Raise the event

    }

}


查看完整回答
反对 回复 2022-12-31
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

如果我理解正确,我认为你不需要代表(尽管)你可以使用它。如果您想访问 Printer 类/对象。


我的建议是(如果您的体系结构允许的话)将打印机对象的引用传递给 MessageOrigin 类。


你可以这样实现:


public class Printer

{

    private MessageOrigin mo;


    public Printer() 

    {

        mo = new MessageOrigin(this);

    }



    public void printMessage(string message) 

    {

        Console.WriteLine(message); // message here should come from the MessageOrigin class

    }

}


public class MessageOrigin

{

    private Printer _parentPrinter;

    public MessageOrigin(Printer print) 

    {

        _parentPrinter = print;

    }

    public string Get_All_Message() 

    {

        //implementation

        return string.Empty;

    }

    public void GetMessage() {

        var msgs = Get_All_Message();

        SendMessageToPrintClass(msgs);

    }


    public void SendMessageToPrintClass(string message) {

        // how do I send the "message" parameter back to the Printer class

       _parentPrinter.Message = message //note that you need to implement your message method/property.

    }

}


查看完整回答
反对 回复 2022-12-31
  • 2 回答
  • 0 关注
  • 85 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信