2010-04-07 3 views
2

왜 "alarm.AlarmEvent + = new AlarmEventHandler (alarm_Sound);" 내게는C# 알람 설정을위한 간단한 이벤트 처리기

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);    
    } 

전체 소스 코드를 여기에 "개체 참조가 비 정적 필드, 메서드 또는 속성 'AlarmClock.Alarm.alarm_Sound (객체, 경우 System.EventArgs)'필요"제공합니다 Program.cs AlarmEventArgs

답변

3

당신은 Set 방법을 호출 한 후 이벤트 핸들러를 추가 할를 호출 인스턴스를 필요가 없습니다 static로 정의하는 것이 좋습니다 것입니다.
따라서 Set 메서드가 이벤트를 발생 시키면 아직 처리기가 없습니다.

4

alarm_Sound 메서드는 인스턴스 메서드인데, 이는 해당 클래스의 인스턴스에서만 사용할 수 있음을 의미합니다.
Mainstatic 메서드이므로 클래스 인스턴스와 연결되지 않으므로 클래스 메서드 인스턴스를 사용할 수 없습니다.

선언문에 static 키워드를 추가하여 alarm_Sound 처리기 메서드를 정적 메서드로 만들어야합니다.

또는 클래스의 인스턴스를 만든 다음 해당 인스턴스의 핸들러 메서드를 참조 할 수 있습니다.

+0

"알람 알람 = 새 알람 (new DateTime (2010, 4, 7, 23, 2, 0)); 이미 인스턴스를 만들었습니까? – yeeen

+0

@yeeen : 그런 다음 'alarm.alarm_Sound'를 추가하여 해당 인스턴스를 사용해야합니다. – SLaks

+0

alr을 컴파일 할 수 있습니다. 하지만 작동하지 않습니다. "헤이!"가 인쇄됩니다. 내 AlarmEventArgs 생성자에서 루프를 계속합니다. 이벤트 alarm_Sound가 호출되지 않습니다 ("Ring ring ring"없음), 어떻게됩니까? – yeeen

0

Alarm_Sound 메서드는 Program.cs 파일에서 Alarm이라는 클래스의 컨텍스트로 정의되어 있으므로 호출 할 때 해당 클래스의 인스턴스가 필요합니다.

그래서 당신은 그 방법