2010-01-27 3 views
1

나는 메소드를 호출 할 필요가 실버 라이트/C#에서, 나는 아이 클래스에서,호출 방법

이제 아이, 어린이 _child = 새로운 아이 (...)의 인스턴스를 생성 클래스 홈페이지를 가지고 Main 클래스에서. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 이벤트?

답변

4

이벤트 버블 링을 활용하는 것입니다; 당신의 모범은 애매하고 명확한 의미론을 가지고 있지 않기 때문에 좋은 대답을하는 것은 불가능합니다.

메인 은 어린이에게 서비스를 제공합니까? 예를 들어, Child가 Main에서 수행하려고하는 전화는 "blah를 할 권한이있는 사용자 목록 가져 오기"또는 "11 월의 모든 미수금을 합산"과 같은 것입니까?

메인에 이 (가) 어린이와 관련된 이벤트 인에 반응하고 있습니까? 예를 들어 Child는 버튼이고 Main은 양식이고 Main은 버튼을 클릭 할 때 반응하기를 원합니다.

Main은 원하는 서비스를 구현하는 Child에 객체 (가능하면 자체)를 제공해야합니다. 객체는 Main 자체이거나 메소드 또는 인터페이스에 대한 위임자 일 수 있지만 서비스가 필요할 때 Child가 호출 할 수있는 객체입니다.

후자의 경우 Main은 Child가 발생시킨 이벤트를 수신해야합니다.

정확도는 의 의미에 따라 달라집니다. 객체의 의미는입니다. 의미를 더 명확하게 설명 할 수 있습니까?

+0

Main은 사용자 정의 컨트롤 인 MainPage입니다. 자식은 장면의 객체를 나타내는 클래스입니다. 하위의 Main 메서드를 호출하여 일부 MainPage 매개 변수를 변경하려고합니다. 호출은 사용자 상호 작용에 의존합니다. – jose

3

이벤트가 적절한 패턴입니다. 객체/클래스 계층의 정보 흐름과 관련된 개념적인 이유는 this answer을 참조하십시오.

깊은 구성 요소를 단순히 "자료"자신의 정보 - 보통 이벤트를 통해 - 그것은 직접

를 호출하지 않고 체인까지 "수레"
7

가장 간단한 해결책은 인스턴스에 Main에 대한 참조를 제공하는 것 Child 클래스의 :

public class Child 
{ 
    private Main main; 

    public Child(Main main) 
    { 
     this.main = main; 

     main.Bar(); 
    } 
} 

public class Main 
{ 
    public void Foo() 
    { 
     Child c = new Child(this); 
    } 

    public void Bar() 
    { 
    } 
} 

더 커플 링을 최소화하기 위해 멀리 IMain 인터페이스 뒤에 Main 클래스를 추상화함으로써 개선 될 수있다.

그러나 가장 좋은 방법은 그 대답이 전화의 의미가 무엇인지에 따라 달라집니다