2014-12-17 4 views
3

디자인 할 인터페이스가 있습니다. "IMyInterface"라고 부르 자. IMyInterface를 구현하는 각 클래스는 N 단계를 갖습니다. 내 IMyInterface의 메소드 중 하나는 GetData(int StepNumber)이 될 것입니다. GetData는 ObservableCollection을 반환해야합니다. ObservableCollection은 현재 수행중인 단계에 따라 변경되는 일부 클래스의 컬렉션입니다. 예를 들어, ModelA 클래스가 iMyInterface를 구현하고 ModelA에 2 단계가있는 경우 ModelAInstance.GetData(1)을 호출하면 ObservableCollection<ClassX>을 반환 할 수 있습니다. ModelAInstance.GetData(2)을 호출하면 ObservableCollection<ClassY>이 반환 될 수 있습니다. 등인터페이스에 대한 메서드 정의 정의

어떤 이유로 GetData에 대한 메서드 선언이 필요합니다. 다음과 같이 사용할 수 있습니다 :

ObservableCollection<object> GetData(int StepID); 

하지만 그건 나에게 맞는 것 같지 않습니다. 제네릭으로 할 수있는 더 좋은 방법이 있다고 생각합니다.

+0

유니온 타입이 필요한 것처럼 보입니다. 필요한 유형간에 어떤 종류의 공통점이 있습니까? – ChaosPandion

+4

호출자는'GetData (2)'가'ClassY' 또는'ClassX'를 반환해야한다는 것을 어떻게 알 수 있습니까? – Matthew

+0

ClassX와 ClassY는 공통점이 있습니까? 어쩌면 공유 인터페이스일까요? –

답변

2

기존 주석을 기반으로 반환 유형이 호출에서 기대할 것을 사용자에게 지정하기에 충분할 경우 호출 유형에 해당 유형을 포함 할 수 있어야합니다.

ObservableCollection<T> GetData<T>(int StepID); 

하는 경우 단순히로 호출 할 수 있습니다 : 스텝 번호는 (더 이상 필요한 경우

그 주에
ModelAInstance.GetData<ClassX>(1); 
ModelAInstance.GetData<ClassY>(2); 

, 내가 궁금해 것 물론 그것이 다른 로직을 사용하지 않는 메소드 내에서).

편집 : Clumsy me. 내가 링크 된 덧글을 통지하지 않았다. 이 솔루션이 작동하면 필자는 나에게도 같은 대답을했던 마이크에게 연기했다.

+0

글쎄, 디자이너와 응용 프로그램의 필요성을 논의한 후 실제 해결책은'ObservableCollection '을 반환하는 것이 었습니다. 나는 그것에 대해 기뻐하지 않는다. 그러나 그것은 우리가 가고있는 것이다. 더 완벽한 세상에서 나는 이것이 더 나은 디자인이었을 것이라고 믿는다. 도움을 주신 OhBeWise와 Mike McCaughan (그리고 모두)에게 감사드립니다. 나는 이것이 이것을 인정 된 대답으로 표시 할 것이다. – DeadZone

관련 문제