[英]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.