나는 다음과 같은 클래스 지금IDisposable을 사용하여 이벤트 구독 취소 - 다른 물건을 처분해야합니까?
public class Presenter: IDisposable
{
public IView View
{get;private set;}
//snip other object reference, all managed
public Presenter(IView view)
{
View=view;
View.MouseUp += MouseUpEvent;
}
public void MouseUpEvent()
{
//do whatever you want to do on mouse up
}
public void Dispose()
{
View.MouseUp -= MouseUpEvent;
// no more manual disposing
}
}
문제는, 내가 제대로 Dispose()
방법을 구현하고있다? 또는 Dispose()
을 명확하게 정의했기 때문에 다른 모든 관리 대상을 수동으로 처리해야합니까?
GC는 수동으로 수행하지 않아도 자체적으로 처리 (이벤트 구독 제외) 할 수 있다고 생각합니다. 내가 맞습니까?
나는 그것이 필요할 것이라고 생각하지 않는다. 아인슈타인의 답을 받아 들였습니다. 나는 당신을 이해하기 쉽기 때문에 (모든 필사자가 아인슈타인을 이해할 수있는 것은 아닙니다 :)). – Graviton
하위 주제가 없어도 클래스가 봉인되지 않으면 하위 클래스가있을 수 있으므로 관리되지 않는 리소스를 구체적으로 보유하지 않아도 finalizer가 있어야합니다 (구성 요소의 경우와 같이). 기본 클래스가 Finalization시 Dispose (bool) 호출을 담당하는지 여부를 알아야합니다. 그러나 나는 내가 주제에서 벗어나고 있다고 말했다. – Josh
@Josh : 클래스에 파이널 라이저가 필요한 경우, 파이널 라이저를 구현하고 'Dispose (false)'를 호출해야한다고 생각합니다. 어쨌든'Dispose'는 여러 번 호출 할 수 있어야합니다. 불필요한 파이널 라이저가있는 클래스를로드하는 것보다 낫습니다. 파이널 라이저는 요즘은 거의 없어야하지만 (SafeHandle' 외), 실제 성능 비용이 있습니다. –