문제

나는 몇 가지 코드를보고 있으며이 진술이 있습니다.

~ConnectionManager()
{
    Dispose(false);
}

수업은 IDisposable 인터페이스이지만 그것이 tilde (~)가 사용되는 것의 일부인지 모르겠습니다.

도움이 되었습니까?

해결책

~ 소멸자입니다

  1. 소멸자는 자동으로 호출되며 명시 적으로 호출 할 수 없습니다.
  2. 파괴자는 과부하 할 수 없습니다. 따라서 수업은 최대 하나의 소멸자를 가질 수 있습니다.
  3. 파괴자는 상속되지 않습니다. 따라서 클래스는 계급 이외의 소멸자가 없으며, 그 안에 선언 될 수 있습니다.
  4. 파괴자는 스트러크와 함께 사용할 수 없습니다. 그들은 수업에만 사용됩니다. 인스턴스는 더 이상 코드가 인스턴스를 사용할 수 없을 때 파괴를받을 수 있습니다.
  5. 인스턴스가 파괴를받을 자격이있는 후 언제든지 인스턴스에 대한 소멸자의 실행이 발생할 수 있습니다.
  6. 인스턴스가 파괴되면, 상속 체인의 파괴자를 순서대로 대부분 파생에서 가장 유도 된 것으로 추정됩니다.

마무리하십시오

C#에서 최종 방법은 표준 C ++ 소멸자가 수행 할 작업을 수행합니다. C#에서는 이름을 유지하지 않습니다. 클래스 이름 앞에 tilde (~) 기호를 배치하는 C ++ 소멸자 구문을 사용합니다.

처분하십시오

a에 물체를 처분하는 것이 바람직합니다 Close() 또는 Dispose() 클래스 사용자가 명시 적으로 호출 할 수있는 메소드. Finalize (Destructor)는 GC에 의해 호출됩니다.

그만큼 idisposable 인터페이스는 세상에 클래스가 배치되어야하는 리소스를 보유하고 사용자에게 해제 방법을 제공한다고 말합니다. 클래스에서 최종화기를 구현 해야하는 경우 Dispose 메소드 ~해야 한다 사용 GC.SuppressFinalize() 방법 인스턴스의 마무리가 억제되도록하는 방법.

무엇을 사용해야합니까?

파괴자를 명시 적으로 부르는 것은 합법적이지 않습니다. 당신의 소멸자는 쓰레기 수집가에 의해 호출 될 것입니다. 가능한 빨리 닫고 폐기하려는 귀중한 관리되지 않은 리소스 (예 : 파일 핸들)를 처리하려면 idisposable 인터페이스를 구현해야합니다.

다른 팁

이것은 파이널 라이저. 솔직히 말해서, 당신은 최종화기를 작성할 필요가 거의 없어야합니다. 당신은 정말로 하나만 쓸 필요가 있습니다.

  • 관리되지 않는 자원에 직접 액세스 할 수 있습니다 (예 : IntPtr) 그리고 당신은 사용할 수 없습니다 SafeHandle 더 쉽게 만듭니다
  • 당신은 구현 중입니다 IDisposable 봉인되지 않은 수업에서. (내가 선호하는 것은 상속을 위해 설계되지 않는 한 클래스를 봉인하는 것입니다.) 파이널 라이저는 그러한 경우에 정식 처분 패턴의 일부입니다.

클래스의 소멸자를 나타내는 데 사용됩니다.

C ++와 마찬가지로 소멸자입니다. 그러나 C#에서는 설명하지 않으며 객체가 수집 될 때 호출됩니다.

보다 소멸자 (C# 프로그래밍 가이드). 그러나 C ++와 달리 프로그래머는 쓰레기 수집기에 의해 결정되기 때문에 소멸자가 호출 될 때를 제어 할 수 없음을 알고 있어야합니다.

~ 일반적으로 해체를 나타냅니다. 객체가 죽기 직전에 실행됩니다.

다음은 내가 찾은 C# deconstructors에 대한 설명입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top