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

时间:2019-04-25 07:47:20

标签: c#

我有2类,打印机和MessageOrigin。 打印机实例化MessageOrigin。在MessageOrigin类中,我可以获取所需的消息,但是我必须将其返回给Printer类,以便可以在控制台上编写它。我认为我必须使用委托和事件筹集者来做到这一点。那里有很多教程和说明,但是很难理解它,更不用说实现它了。通过解决我在这里遇到的问题,可能会更容易理解如何使用它。请参阅下面的示例代码,并教我们如何在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 个答案:

答案 0 :(得分:2)

您可以使用events。类unicodedata.normalize('NFKD', title)将是发布者,而类MessageOrigin将是订阅者。好处是以后您可以添加更多订户,而无需更改类Printer

MessageOrigin

答案 1 :(得分:1)

如果我理解正确,我认为您不需要委托(尽管可以使用)。如果要访问打印机类/对象。

我的建议是(如果您的体系结构允许)将打印机对象的引用传递给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.
    }
}