![](/img/trans.png)
[英]Raise event c# gives error: No overload matches delegate EventHandler
[英]Teach us how to use Delegate and to raise an event in C#
我有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
}
}
感谢您的耐心等待。
您可以使用活动 。 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
}
}
如果我理解正确,我认为你不需要代表(虽然)你可以使用它。 如果要访问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.
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.