解决 能够't print my messages?

合格

新成员
已加入
2020年11月13日
留言内容
3
编程经验
1-3
我正在做关于侦听器和事件的任务,无法打印我的消息..这是我的简单代码(不打印任何内容)

C#:
using System;
class Program
{
    public delegate void Show(string _msg);
    public static event Show OnShow;

    public delegate void Three(int _amount);
    public static event Three OnThree;

    public delegate void Messages(string _word, string _secondWord);
    public static event Messages OnMessages;

    static void Main()
    {
        Listener listener = new Listener();
       
        //Raise events
        if (OnShow != null)
            OnShow("Display ");

        if (OnThree != null)
            OnThree(3);

        if (OnMessages != null)
            OnMessages(" different", " messages");
    }
}

class Listener
{
    public void ListenToProgramEvents()
    {
        //Add your listeners HERE
        Program.OnShow += HandleShow;
        Program.OnThree += HandleThree;
        Program.OnMessages += HandleMessages;
    }
        //Appropriate methods HERE (that are called when events are received from Program)
    public void HandleShow(string _msg)
    {
        Console.WriteLine(_msg);
       
    }
    private void HandleThree(int _amount)
    {
        Console.WriteLine(_amount);
    }
    private void HandleMessages(string _word, string _secondWord)
    {
        Console.WriteLine(_word + _secondWord);
    }
    //Expected result: print "Display 3 different messages" to console

}
 
由主持人最后编辑:
Solution
Look in your main();.

在创建事件之前,您如何期望事件触发?

因此,它们为空是唯一的选择,这就是为什么您的代码无法执行的原因。

通过调用首先创建它们的方法来修复它:
C#:
        Listener listener = new Listener();
        listener.ListenToProgramEvents();

标记为已解决。

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,528
地点
弗吉尼亚州切萨皮克
编程经验
10+
您是从控制台运行还是在Visual Studio中运行?如果从控制台运行,则应该获得输出。

如果来自Visual Studio,对于VS2019之前的版本(?),控制台程序将快速显示在控制台窗口中,然后关闭。您需要添加暂停或等待其他输入。或者,您可以不使用调试器运行(Ctrl-F5)。

使用VS2019,新的默认设置是使控制台窗口保持打开状态。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,528
地点
弗吉尼亚州切萨皮克
编程经验
10+
如果执行第34行,则在第18行上不应为null。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
public void ListenToProgramEvents()
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
Look in your main();.

在创建事件之前,您如何期望事件触发?

因此,它们为空是唯一的选择,这就是为什么您的代码无法执行的原因。

通过调用首先创建它们的方法来修复它:
C#:
        Listener listener = new Listener();
        listener.ListenToProgramEvents();

标记为已解决。
 
解决方案

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
在调用ListenToProgramEvents之前: 截屏
调用ListenToProgramEvents之后: 截屏

很高兴您知道了@Sheepings (y)
一个简单的解决方法,当您累时很容易错过。我认为我们的OP可能会很累。也许他们假设您实例化一个对象时,它通过调用它们本身来初始化其中的所有方法。 :eek:

即使在我最疲惫的状态下,有时我也会感到惊讶。 ;)
 
最佳 底部