ISomeBehavior를 구현하는 두 클래스가 있습니다. 이제는 그들에게 기능을 공유하길 원합니다. 일반적으로 ISomeBehavior를 SomeBehaviorBase와 같은 추상 클래스로 대체합니다. 문제는 이미 다른 클래스에서 파생 된 하위 클래스 중 하나이며 다른 클래스는 우리가 소유 한 소프트웨어가 아니라는 것입니다. (이것은 C#이므로 다중 상속은 옵션이 아닙니다.) 제 3 자 클래스에서 파생 된 서브 클래스에는 구현이 없습니다. 이것은 단순히 제 3 자 클래스에서 파생되고 ISomeBehavior를 구현하므로 제 3 자 클래스는 ISomeBehavior를 구현하는 다른 하위 클래스와 동일한 방식으로 처리 될 수 있습니다.하위 클래스가 이미 다른 기본 클래스에서 파생 된 경우 어떻게 동작을 공유 할 수 있습니까?
내가 한 것은 잠시 ISomeBehavior에서 확장 메서드를 구현하는 것입니다. 이제 소비 코드 메서드를 호출 할 수 있습니다. 이 방법의 문제점은 호출 코드가이 확장 메서드를 사용하도록하고 싶다는 것입니다. 인터페이스에서 SomeMethod()를 제거 할 수 없습니다. 확장 메서드가 결국 호출해야하기 때문입니다.
두 클래스를 다른 클래스, 제 3 자 클래스에서 이미 파생 시켰을 때 두 클래스가 동일한 동작을 우아하게 공유하도록하는 방법에 대한 아이디어가 있습니까? 참고 : 전략 디자인 패턴은 여기에 맞는 것처럼 들리지만, 동작은 이 하위 클래스 중으로 변할 때 사용됩니다. 여기서의 행동은 변하지 않습니다. 단지 공유해야합니다. http://www.codeproject.com/KB/architecture/smip.aspx
GJ
SomeMethod() 란 무엇입니까? 두 번째 단락에서 언급 할 수는 있지만 제거 할 수 없다고 말하면서 * 제거 할 이유 *를 알지 못합니다. –
클라이언트 코드가 그것을 사용할 수 없도록 SomeMethod()를 제거하려고합니다. 확장 메서드는 그것을 호출합니다. 그리고 클라이언트 코드는 확장 메서드를 호출합니다. 확장 메서드는 기본적으로 SomeMethod()이지만 두 개의 추가 매개 변수가 있습니다. 이것은 SomeMethod()가 SomeMethod를 호출하기 전에 확장 처리를 할 수있게합니다. –