2012-02-06 2 views
0

캡슐화 된 멤버 이벤트를 comsume하려고합니다. 설명하겠습니다. MyClassB는 개인 회원 MyClassB _obj가 있습니다.캡슐화 된 멤버 이벤트 사용

public class MyClassA 
{ 
    private MyClassB _obj; 
    public MyClassA() 
    { 
     _obj = new MyClassB(); 
    } 
} 

MyClassB에는 SaveProgress 이벤트가 있습니다.

클라이언트 응용 프로그램의 경우 MyClassB는 표시되지 않습니다. 우리는 MyClassA를 통해 이벤트를 처리해야합니다.

public partical class _Default: System.Web.UI.Page 
{ 
    protected void button1_Click(object sender, EventArgs e) 
    { 
     MyClassA objA = new MyClassA(); 
     // We need to handle it's event through MyClassA 
     // objA.SaveProgress += new EventHandler<SaveProgressEventArgs>(objA_SaveProgress); 
    } 
} 

어떻게하면됩니까? 감사. objA의 SaveProgress 이벤트에만 MyClassB 클래스의 이벤트에 전달되면

답변

2

, 당신은이를 사용할 수 있습니다

public event EventHandler<SaveProgressEventArgs> SaveProgress 
{ 
    add 
    { 
      lock(_obj.Event) 
       _obj.Event += value; 
    } 
    remove 
    { 
      lock(_obj.Event) 
      _obj.Event -= value; 
    } 
} 
+0

예, 그게 내가 알고 싶은거야. 감사. 이 두 가지 수정 사항 : 1) public 이벤트 EventHandler SaveProgress; 2) lock (_obj.Event)은 "이벤트가 + = 또는 - =의 왼쪽에만 나타날 수 있습니다."라는 오류를 표시합니다. 그래서 나는 그것을 제거했다. (자물쇠가없는 어떤 문제?). –

+0

감사합니다. 예제에 이벤트 유형을 추가하겠습니다. 잠금 장치가 없으면 좋을 것입니다. 나는 원래 자물쇠없이 그것을했지만, 내가 옳았는지 확인하기 위해 msdn을 점검했고, 자물쇠를 추가했다. 가장 최근의 컴파일러가 이벤트를 잠그지 못하게한다는 사실을 잊어 버렸습니다. – JKor