소멸자와 클래스의 Finalize 메서드 사이에 어떤 차이가 있습니까?C#에서 클래스의 소멸자와 Finalize 메서드의 차이점은 무엇입니까?
최근에 Visual Studio 2008에서는 Finalize 메서드와 동의어 인 소멸자가 고려됩니다. 즉, Visual Studio에서는 클래스에서 두 메서드를 동시에 정의 할 수 없습니다. 예를 들어
, 다음의 코드 :
class TestFinalize
{
~TestFinalize()
{
Finalize();
}
public bool Finalize()
{
return true;
}
}
은 소멸자에 마무리하기 위해 호출에 다음과 같은 오류를 제공합니다 :
The call is ambiguous between the following methods or properties: 'TestFinalize.~TestFinalize()' and 'TestFinalize.Finalize()'
그리고
마무리에 대한 호출이 주석하는 경우, 그것을 다음과 같은 오류가 발생합니다 :Type 'ManagementConcepts.Service.TestFinalize' already defines a member called 'Finalize' with the same parameter types
'관리되지 않는 리소스를 정리하기 위해 Finalize 메서드 만 구현하면됩니다 : Finalize에 넣습니다. Dispose와 같은가요? – hqt
@ hqt : 파이널 라이저를 구현해야하는 곳보다 'Dispose'를 크게 구현해야하는 경우가 훨씬 많습니다. 클래스 또는 파생 클래스의 인스턴스가 관리되지 않는 리소스를 직접 소유하거나 직접 관리되지 않는 리소스를 직접 소유 할 수있는 마지막 것일 가능성이 높거나 마지막으로 직접 소유 한 리소스를 직접 소유하는 경우 Dispose를 구현합니다. 직접 리소스를 소유 할 때만 리소스 정리를 위해 Finalize를 구현하십시오. 직접은 관리되지 않는 리소스 을 소유하고 거의 아무것도 다른 사람이 없습니다 - 훨씬 더 좁은 시나리오입니다. – supercat
@hqt : 하나의 클래스가 관리되지 않는 리소스를 직접 소유하고 다른 객체에 대한 참조를 보유하는 경우 관리되지 않는 리소스는 일반적으로 다른 클래스에 대한 강력한 참조를 보유하지 않는 자체적 인 finalizable 클래스로 분리되어야합니다. 다른 객체에 대한 참조를 보유하는 클래스는 리소스 자체를 소유하는 것이 아니라 "관리되지 않는 리소스를 직접 소유하는 것"만 소유하므로 최종자를 필요로하지 않습니다. – supercat