2013-10-22 3 views
0

많은 시간을 요청 받았지만 문제를 언급 한 인터넷에서 한 곳을 찾을 수 없습니다.Dispose 메서드의 상속이 암시 적으로 선언되었습니다.

public class BaseDispose : IDisposable 
{ 
    void IDisposable.Dispose() 
    { 

    } 
} 

public class ChildDispose : BaseDispose, IDisposable 
{ 
    void IDisposable.Dispose() 
    { 
     //var disp = base as IDisposable; 
     //(base as IDisposable).Dispose(); 
    } 
} 

관리되지 않는 리소스를 가지고있는 기본 클래스가 있습니다 :

상황

는 해결책이 없습니다 믿고 너무 간단합니다. 어떤 이유로 그들은 IDisposable의 암묵적인 실현을 통해 그들을 처분합니다. 이 기본 클래스에서 파생 된 클래스는 자신과 부모의 리소스를 모두 제거해야합니다.

어떻게하면 C#에서이 작업을 수행 할 수 있습니까? 두 라인은 당신이 이러한 클래스 모두에 액세스 할 수 있으면 기본 클래스에 대한 액세스 권한이없는 경우

+0

시골 아일랜드의 한 농민을 멈추게하는 영업 담당자는 "더블린으로 돌아갈 수있는 방법을 알려주시겠습니까?"라고 묻습니다. 그리고 ould fella는 "Dublin? 글쎄, 나는 너에게 한 가지를 말할거야. 나는 여기서 시작하지 않을거야."라고 말합니다. BaseDispose 및 ChildDispose의 소스를 변경할 수 있습니까? 이 Dispose 구현은 미쳐 버려서 [권장 패턴] (http://msdn.microsoft.com/en-us/library/ms182330.aspx) –

+1

에서 멀리 벗어났습니다. @Binary Microsoft에서 온 사람들이 Microsoft에서 권장하는 패턴! 이것은 정확히 System.ServiceModel.ClientBase 을 구현 한 방식이기 때문입니다. –

+0

감미로운 f ** k me Jebus! 진심이야? 꺼내 줘. . . –

답변

1

다음, 제대로 Disposable pattern

을 구현하기 위해 다음 다른 변경할 컴파일 오류가 발생 위의 주석 시도 할 것은 자식 클래스를 으로 변경하는 것이 아니라이 기본 클래스를 상속하지 않지만 인스턴스를 구성원으로 포함하고 일반적으로 base을 호출 할 위임하도록 기본 클래스를 상속합니다.
그러나 기대하는 기본 클래스에 자식 클래스를 전달해야하는 경우이 방법은 작동하지 않습니다. 이러한 클래스를 다형 적으로 처리 할 수는 없습니다.

그렇지 않으면 나는 특정 피클의 탈출구를 볼 수 없습니다.

업데이트
확인 코드를 반영 내가 기능적으로 동일 할 것이다 그래서 당신의 처분 메서드 호출 base.Close()을 가지고, 그것은 단순히 Close() 메소드의 호출을 알려하지만 이상적이지 분명히 할 수 System.ServiceModel.ClientBase<TChannel>.Dispose()을 검사 한.

또한 클래스를 봉인하거나 IDispose를 올바르게 구현합니다 (즉, 암시 적으로 IDisposable을 구현하지 않음). 그렇지 않습니까?

학습과 갱신

여기 Close & Dispose, which to call?

을 언급 그리고 여기 조건부 Close() 또는 Abort()

를 호출 처분 방법의 포함 ClientBase<T> implementation의 예로서 Close() 전화를 대신 처리 확인해야

희망이 있습니다.

+0

불행히도 WCF가 제공하는 기본 클래스는 변경할 수 없습니다. 클래스는 System.ServiceModel.ClientBase 입니다. 추상 및 공개로 표시되어 있으므로 파생 된 것으로 간주됩니다.그리고 아, 암묵적으로 IDisposable을 구현합니다. –

+0

@ 레오 니드 내 대답이 업데이트되었습니다. –

+1

시간과 연구에 많은 시간을드립니다. 이것은 분명히 내 실제 문제를 해결하지만, 불행히도 화제 시동기를 미해결 상태로 남겨 둡니다. WCF 팀이 어떻게 든 간과 한 나쁜 디자인의 예를 들어 보겠습니다. 답변으로 답변을 표시하고 있습니다. –

관련 문제