나는 메소드를 호출 할 필요가 실버 라이트/C#에서, 나는 아이 클래스에서,호출 방법
이제 아이, 어린이 _child = 새로운 아이 (...)의 인스턴스를 생성 클래스 홈페이지를 가지고 Main 클래스에서. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 이벤트?
나는 메소드를 호출 할 필요가 실버 라이트/C#에서, 나는 아이 클래스에서,호출 방법
이제 아이, 어린이 _child = 새로운 아이 (...)의 인스턴스를 생성 클래스 홈페이지를 가지고 Main 클래스에서. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 이벤트?
이벤트 버블 링을 활용하는 것입니다; 당신의 모범은 애매하고 명확한 의미론을 가지고 있지 않기 때문에 좋은 대답을하는 것은 불가능합니다.
메인 은 어린이에게 서비스를 제공합니까? 예를 들어, Child가 Main에서 수행하려고하는 전화는 "blah를 할 권한이있는 사용자 목록 가져 오기"또는 "11 월의 모든 미수금을 합산"과 같은 것입니까?
메인에 이 (가) 어린이와 관련된 이벤트 인에 반응하고 있습니까? 예를 들어 Child는 버튼이고 Main은 양식이고 Main은 버튼을 클릭 할 때 반응하기를 원합니다.
Main은 원하는 서비스를 구현하는 Child에 객체 (가능하면 자체)를 제공해야합니다. 객체는 Main 자체이거나 메소드 또는 인터페이스에 대한 위임자 일 수 있지만 서비스가 필요할 때 Child가 호출 할 수있는 객체입니다.
후자의 경우 Main은 Child가 발생시킨 이벤트를 수신해야합니다.
정확도는 의 의미에 따라 달라집니다. 객체의 의미는입니다. 의미를 더 명확하게 설명 할 수 있습니까?
이벤트가 적절한 패턴입니다. 객체/클래스 계층의 정보 흐름과 관련된 개념적인 이유는 this answer을 참조하십시오.
깊은 구성 요소를 단순히 "자료"자신의 정보 - 보통 이벤트를 통해 - 그것은 직접
를 호출하지 않고 체인까지 "수레"
가장 간단한 해결책은 인스턴스에 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
클래스를 추상화함으로써 개선 될 수있다.
그러나 가장 좋은 방법은 그 대답이 전화의 의미가 무엇인지에 따라 달라집니다
Main은 사용자 정의 컨트롤 인 MainPage입니다. 자식은 장면의 객체를 나타내는 클래스입니다. 하위의 Main 메서드를 호출하여 일부 MainPage 매개 변수를 변경하려고합니다. 호출은 사용자 상호 작용에 의존합니다. – jose