【问题标题】:C# Simple Event Handler for Setting Alarm用于设置警报的 C# 简单事件处理程序
【发布时间】:2010-04-07 16:05:45
【问题描述】:

为什么下面这行“alarm.AlarmEvent += new AlarmEventHandler(alarm_Sound);”给我“非静态字段、方法或属性‘AlarmClock.Alarm.alarm_Sound(object, System.EventArgs)’需要对象引用”

   public static void Main(string[] args)
    {
        Alarm alarm = new Alarm(new DateTime(2010, 4, 7, 23, 2, 0));
        alarm.Set();
        alarm.AlarmEvent += new AlarmEventHandler(alarm_Sound);            
    }

完整的源代码在这里: Program.cs AlarmEventArgs

【问题讨论】:

    标签: c# visual-studio events event-handling


    【解决方案1】:

    您的alarm_Sound 方法是一个实例方法,这意味着它只能用于您的类的实例
    由于Mainstatic方法,它与类的实例没有关联,所以你不能在其中使用任何实例方法。

    您需要通过在其声明中添加 static 关键字来使您的 alarm_Sound 处理程序方法成为静态方法。

    或者,您可以创建该类的一个实例,然后引用该实例的处理程序方法。

    【讨论】:

    • 我想通过“Alarm alarm = new Alarm(new DateTime(2010, 4, 7, 23, 2, 0));"我已经创建了一个实例?
    • @yeeen:那么你需要通过添加alarm.alarm_Sound来使用那个实例。
    • 可以编译alr。但是,它不起作用。它打印出“嘿!”从我的 AlarmEventArgs 构造函数并继续循环。事件 alarm_Sound 没有被调用(没有“Ring ring ring!”),怎么会?
    【解决方案2】:

    您在调用 Set 方法后添加了事件处理程序。
    因此,当Set 方法引发事件时,它还没有处理程序。

    【讨论】:

      【解决方案3】:

      因为 alarm_Sound 方法是在 Program.cs 文件中名为 Alarm 的类的上下文中定义的,所以要调用它,您需要该类的实例。

      最好将其定义为static,这样您就不需要实例来调用该方法

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-11
        相关资源
        最近更新 更多