2014-09-02 3 views
1

는 C#으로 다른 클래스를 속하는 이벤트를 트리거하기 위해 어떻게 든 가능인가요 obj.onTesting.Invoke();통화 이벤트 명시 적으로

+0

당신은 ** 이벤트 만의 왼쪽에 나타날 수 있습니다 얻을 + = 또는 - = **이 사용하는 전체 목적을 패배 물론 오류 – Kowalski

답변

3

아니요 다른 클래스에서 직접 호출 할 수 없습니다. 그것이 사건의 핵심입니다 (캡슐화).

당신은 방금 event 키워드를 제거, 그것은 당신이했던 방법을 호출하고 대리자를 사용해야하는 경우 다음 대신

class Main 
{ 
    public static void Main() 
    { 
    foo obj = new foo(); 

    ... 

    obj.RaiseEvent(); 
    } 
} 

RaiseEvent 메소드를 호출 도우미 메서드

class foo 
{ 
    public delegate void myEvntHandler(); 
    public event myEvntHandler onTesting; 

    public void RaiseEvent() 
    { 
     if(onTesting !=null) 
      onTesting(); 
    } 
} 

이 필요합니다. 당신이 그렇게하지 못하도록 막지는 않습니다. (권장하지 않습니다)

+0

처음에는 이벤트. – Servy

+1

@Servy'RaiseEvent' 메소드가 이벤트를 발생시키는 것 외에는 아무것도하지 않는다면 나는 당신에게 동의한다. 그것이 부작용을 일으키고 사건을 일으킨다면 그것은 목적의 IMO를 이길 수 없습니다. –

+1

물론, 요점은 * 다른 일을 할 때 * 이벤트가 발생했을 때입니다. 당신은 단순히 사건을 해고하는 것이 아니라, 어떤 행동을 취할 때 그 행동이 일어 났을 때 그 사건은 해고됩니다. 어떤 멤버가 호출 된 결과 거의 모든 사건이 해고되었습니다. 요점은 단지 그렇게하는 것이 아니라는 것입니다. – Servy

1

아니요. 이벤트의 목적은 이벤트 핸들러를 추가/제거하는 것 이외의 모든 액세스를 명시 적으로 금지하면서 델리게이트를 래핑하는 것입니다. event 키워드는 특별히 이벤트를 선언 한 클래스 이외의 클래스를 호출하지 못하도록합니다.

0

짧은 답변 : 제

긴 답 : 거기에 후드 실제 개체 대표와는 달리 "이벤트"같은 것은 아래. 이벤트는 핸들러를 추가 및 제거하는 두 가지 메소드와 전용hidden myEvntHandler 필드의 편의를위한 것입니다.

논리적으로 클래스 외부의 이벤트를 발생시키는 것은 의미가 없습니다. 이벤트의 전체적인 포인트는 클래스가 트리거를 감지했을 때 클래스에 의해 발생된다는 것입니다.

당신은 단지 그 다음 갈 수있는 올바른 방법을 핸들러를 추가했습니다 다른 클래스를 테스트하기 위해 이벤트를 발생하려면

입니다에 :

  1. 이동
  2. 가 구현하는 인터페이스에 이벤트 인터페이스를 구현하고 "RaiseEvent"메소드를 추가하는 테스트 클래스를 생성하십시오.
  3. 는 테스트 대상 장치에 인터페이스를 주입
관련 문제