为什么以下行“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
答案 0 :(得分:4)
您的alarm_Sound
方法是一种实例方法,这意味着它只能用于您班级的实例。
由于Main
是static
方法,因此它与类的实例无关,因此您不能在其中使用任何实例方法。
您需要通过在其声明中添加alarm_Sound
关键字,使static
处理程序方法成为静态方法。
或者,您可以创建该类的实例,然后引用该实例的处理程序方法。
答案 1 :(得分:3)
您在调用Set
方法后添加了事件处理程序
因此,当Set
方法引发事件时,它还没有处理程序。
答案 2 :(得分:0)
因为alarm_Sound方法是在Program.cs文件中名为Alarm的类的上下文中定义的,所以,为了调用它,你需要一个该类的实例。
最好将其定义为static
,这样您就不需要一个实例来调用该方法