표준 접근법은 보호 된 인스턴스 변수로 "상속"하려는 클래스를 래핑 한 다음 래핑 된 모든 비공개 멤버 (메서드/속성/이벤트/등)를 에뮬레이션한다고 가정합니다. 클래스에있는 클래스입니다. 그런 다음이 클래스와 해당 멤버를 가상으로 표시하여 표준 다형성 기능을 사용할 수 있습니다.
다음은 내가 말하는 의미의 예입니다. ClosedClass
은 액세스 권한이없는 코드가있는 어셈블리에 포함 된 클래스입니다. 당신이 잘 설계되었습니다 참조하는대로 조립하면
public virtual class WrapperClass : IClosedClassInterface1, IClosedClassInterface2
{
protected ClosedClass object;
public ClosedClass()
{
object = new ClosedClass();
}
public void Method1()
{
object.Method1();
}
public void Method2()
{
object.Method2();
}
}
, 당신이 이제까지 appropiately 표시 될 것이다 액세스 할 수있는 모든 유형/회원 (추상은 가상은 밀봉),하지만 실제로 이것은 불행하게도이 아니다 (때로는 기본 클래스 라이브러리에서이 문제점을 경험할 수도 있습니다). 제 견해로, 래퍼 클래스는 여기로가는 길입니다. 그것의 이점을 가지고 있습니다 (심지어 을 상속 받기 원하는 클래스가 상속 가능한 임), 즉 클래스의 사용자가 액세스하지 못하도록하는 메소드의 수정자를 제거/변경하는 경우에도 마찬가지입니다. BCL의 ReadOnlyCollection<T>
은 이에 대한 좋은 예입니다.
if 문이 두 개인 경우 리팩터링이 지나치게 복잡 할 수 있습니다. 당신은 가끔씩 Patterns-Happy가 될 필요는 없습니다.) – Sung