Class ComponentsContainer ' a component contains other components'
Inherits System.ComponentModel.Component
Private foo as New Component
Private bar as New Component
Protected Override Sub Finalize()
foo.Dispose() ' HERE ? '
bar.Dispose()
MyBase.Finalize()
End Sub
Protected Overrides Sub Dispose(disposing As Boolean)
If disposing Then
foo.Dispose() ' OR HERE ? '
bar.Dispose()
End If
MyBase.Dispose(disposing)
End Sub
End Class
답변
:
Protected Override Sub Finalize()
' foo.Dispose() '
' bar.Dispose() '
MyBase.Finalize()
End Sub
그리고 그에서이 클래스는 관리되지 않는 자원이없는 경우 당신이 필요로하지 않는 다음을 파이널 라이저.
참고 : 클래스에
Public Sub Dispose()
오버로드가 없습니다.
편집 : (구성 요소를 확장)
foo
이후 및 bar
관리하는 자원은 당신은 단지 Protected Overrides Sub Dispose(disposing As Boolean)
방법이 필요합니다. 문제의 버전이 맞습니다. 그리고 간단히 Finalize()
을 입력하십시오.
finalizer는이 클래스가 소유하고있는 객체를 직접 처리하지 않고이 클래스 'Dispose passing false'를 호출해야합니다. MSDN을 참조하십시오.
편집 : 그래서 질문에 답하기 위해 소유 한 객체를 폐기하는 것이 완료, 완료가 아닌 배출로 수행되어야합니다.
편집 2 : 공지 사항,이 개체가 배치되지 않고 마무리되면, 폐기 만 "false"를 매개 변수 (의 Finalize로) 전화를받을 것이고, 자식 개체가이에 의해 배치되지 않음을 의미 수업. 이는 관리 객체이므로 프레임 워크가 명시 적으로 삭제되지 않은 것처럼 느껴질 때 마무리됩니다.
수정하십시오. 이 예제에서 Dispose (False)는 아무 것도하지 않습니다 (아마도 기본 클래스를 제외하고). Finalize 및 Dispose (bool)를 제거하는 것이 가장 좋은 방법입니다. –
결국, foo와 bar는 어디에 처리해야합니까? – serhio
Dispose 메서드에서. – BlueMonkMN
Dispose
가비지 수집기가 개체를 해제하기 전에 명시 적으로 일부 리소스를 해제하려는 경우입니다.
가비지 수집기가 객체를 해제 할 때 자동으로 호출되거나 호출 될 때 자동으로 호출됩니다.
가비지 수집을 제어해서는 안되므로 많은 자원을 보유하고있는 개체가있는 경우 Dispose를 사용해야합니다. 프레임 워크 문서에서
: 심지어 당신이 Finalize 메서드를 사용하여 암시 적 정리 을 제공해야 폐기의 방법으로 명시 적으로 제어를 제공
참고. Finalize 프로그래머가 Dispose를 호출하지 못하면 이 영구적으로 누출되지 않도록 백업을 제공합니다. 당신이 상속 무엇
Implementing Finalize and Dispose to Clean Up Unmanaged Resources
제 경우 명시적인 정리는'foo.Dispose'와'bar.Dispose' 여야합니다. 제 경우에는 Finalize에서 "암시 적 정리"를 의미 할 수 있습니다 ... – serhio
? 나는 그것이 직접 또는 간접적으로 System.ComponentModel.Container일지도 모른다라고 생각한다.
이 경우 아무 것도 할 필요가 없습니다. System.ComponentModel.Container automatically은 포함 된 모든 구성 요소를 Dispose
메서드로 처리합니다. 그것을 혼자서 버리십시오 - dispose/finalize 패턴을 구현하는 가장 쉬운 방법입니다.
- 1. MEF 컨테이너로 부품을 폐기 하시겠습니까?
- 2. 프로젝트 폐기 또는 보관
- 3. 제거(), 클리어() 또는 폐기()
- 4. CATiledLayer의 처리를 중단 하시겠습니까?
- 5. 코드 테스트를위한 "폐기"MySQL 세션을 시작 하시겠습니까?
- 6. IIS7로 다운로드 처리를 전송 하시겠습니까?
- 7. itertools와 다중 처리를 결합 하시겠습니까?
- 8. 처리를 처리해야합니까? (URL) 시작 하시겠습니까?
- 9. 유효성 검사를 메소드 또는 속성으로 구현 하시겠습니까?
- 10. 아키텍처에서 cronjob을 구현 하시겠습니까?
- 11. 폐기 컨텍스트
- 12. 폐기 부품
- 13. 브러쉬 폐기
- 14. NSManagedObjects 폐기
- 15. 발사체 동작에서 풍속을 구현 하시겠습니까?
- 16. 여러 인증 방법 또는 역할 기반 인증을 구현 하시겠습니까?
- 17. 오버레이 아이콘을 구현 하시겠습니까?
- 18. 비동기 콜백에서 무거운 처리를 수행 하시겠습니까?
- 19. ProcessInputRow 메서드에서 Row 처리를 중단 하시겠습니까?
- 20. 자바 웹 서버에서 세션을 구현 하시겠습니까?
- 21. 폐기 지정 클래스 : 설정 NULL VS .Dispose
- 22. android에서 iCalendar를 구현 하시겠습니까?
- 23. Java에서 SimHash를 구현 하시겠습니까?
- 24. Doublebuffering을 구현 하시겠습니까?
- 25. div 테이블에서 최종 셀의 너비를 확장 하시겠습니까?
- 26. 플렉스 또는 처리를 사용하여 브라우저에서 마이크로 녹음
- 27. 폐기 된 CAS 클래스
- 28. HttpRuntime.Cache 폐기 방법
- 29. libcurl의 응답 데이터 폐기
- 30. StructureMap 컨테이너 폐기
'Public Sub Dispose' 오버로드가 의심 스럽습니다. – MarkJ
내가 상속 한 곳에서 설명하는 코드를 업데이트했습니다. 두 개의 다른 구성 요소가 포함 된 구성 요소가 있습니다. – serhio
@ MarkJ, 당신은 정확하고, serhio는 그것을 확실하게했다. –