은 : 테스트 실행시에 ctor클래스에 정적 필드가 포함되어 있으면 C# 클래스 소멸자가 호출됩니까? 다음 코드
public sealed class Switch
{
public static MyObj s_object = new MyObj();
private readonly SomeObject m_object = new SomeObject();
~Switch()
{
m_object?.Dispose();
}
}
public class Test()
{
Test()
{
Switch switch = new Switch();
switch = null;
...
}
}
새로운 스위치 객체는 즉시 널로 설정 생성된다. 어떤 시점에서 GC는 처리 할 때 소멸자 인 ~Switch()
을 호출하여 처리합니다. 그러나 클래스에 s_object
과 같은 정적 필드가 있고 호출하는 앱이 종료되지 않은 경우 (앱 도메인이 아직로드 됨) 발생합니까? 정적 객체는 응용 프로그램의 수명 동안 지속됩니다. 그게 포함 된 비 정적 클래스를 의미합니까?
이것이 당신의 상황에 적용되는지는 잘 모르겠지만, 일반적으로 자원을 정리하려면 일반적으로'IDisposable'을 구현해야하며 정리할 관리되지 않는 항목이있는 경우에만 소멸자를 사용해야합니다. –
@ C.Evenhuis C#은 소멸자조차 가지고 있지 않으며, 매우 다른 일을하는 finalizers를 가지고 있습니다. – Mgetz
@ C.Evenhuis finalizer의 정의를 볼 때, 관리되지 않는 리소스가 있다는 것을 실제로 볼 수 있습니다. 그래서 finalizer가 없어야하고,'IDisposalbe '를 구현해야합니다. – Servy