함수 이름 이전의 tilde는 c#의 의미는 무엇입니까?
문제
나는 몇 가지 코드를보고 있으며이 진술이 있습니다.
~ConnectionManager()
{
Dispose(false);
}
수업은 IDisposable
인터페이스이지만 그것이 tilde (~)가 사용되는 것의 일부인지 모르겠습니다.
해결책
~ 소멸자입니다
- 소멸자는 자동으로 호출되며 명시 적으로 호출 할 수 없습니다.
- 파괴자는 과부하 할 수 없습니다. 따라서 수업은 최대 하나의 소멸자를 가질 수 있습니다.
- 파괴자는 상속되지 않습니다. 따라서 클래스는 계급 이외의 소멸자가 없으며, 그 안에 선언 될 수 있습니다.
- 파괴자는 스트러크와 함께 사용할 수 없습니다. 그들은 수업에만 사용됩니다. 인스턴스는 더 이상 코드가 인스턴스를 사용할 수 없을 때 파괴를받을 수 있습니다.
- 인스턴스가 파괴를받을 자격이있는 후 언제든지 인스턴스에 대한 소멸자의 실행이 발생할 수 있습니다.
- 인스턴스가 파괴되면, 상속 체인의 파괴자를 순서대로 대부분 파생에서 가장 유도 된 것으로 추정됩니다.
마무리하십시오
C#에서 최종 방법은 표준 C ++ 소멸자가 수행 할 작업을 수행합니다. C#에서는 이름을 유지하지 않습니다. 클래스 이름 앞에 tilde (~) 기호를 배치하는 C ++ 소멸자 구문을 사용합니다.
처분하십시오
a에 물체를 처분하는 것이 바람직합니다 Close()
또는 Dispose()
클래스 사용자가 명시 적으로 호출 할 수있는 메소드. Finalize (Destructor)는 GC에 의해 호출됩니다.
그만큼 idisposable 인터페이스는 세상에 클래스가 배치되어야하는 리소스를 보유하고 사용자에게 해제 방법을 제공한다고 말합니다. 클래스에서 최종화기를 구현 해야하는 경우 Dispose 메소드 ~해야 한다 사용 GC.SuppressFinalize()
방법 인스턴스의 마무리가 억제되도록하는 방법.
무엇을 사용해야합니까?
파괴자를 명시 적으로 부르는 것은 합법적이지 않습니다. 당신의 소멸자는 쓰레기 수집가에 의해 호출 될 것입니다. 가능한 빨리 닫고 폐기하려는 귀중한 관리되지 않은 리소스 (예 : 파일 핸들)를 처리하려면 idisposable 인터페이스를 구현해야합니다.
다른 팁
이것은 파이널 라이저. 솔직히 말해서, 당신은 최종화기를 작성할 필요가 거의 없어야합니다. 당신은 정말로 하나만 쓸 필요가 있습니다.
- 관리되지 않는 자원에 직접 액세스 할 수 있습니다 (예 :
IntPtr
) 그리고 당신은 사용할 수 없습니다SafeHandle
더 쉽게 만듭니다 - 당신은 구현 중입니다
IDisposable
봉인되지 않은 수업에서. (내가 선호하는 것은 상속을 위해 설계되지 않는 한 클래스를 봉인하는 것입니다.) 파이널 라이저는 그러한 경우에 정식 처분 패턴의 일부입니다.
클래스의 소멸자를 나타내는 데 사용됩니다.
C ++와 마찬가지로 소멸자입니다. 그러나 C#에서는 설명하지 않으며 객체가 수집 될 때 호출됩니다.
보다 소멸자 (C# 프로그래밍 가이드). 그러나 C ++와 달리 프로그래머는 쓰레기 수집기에 의해 결정되기 때문에 소멸자가 호출 될 때를 제어 할 수 없음을 알고 있어야합니다.
~ 일반적으로 해체를 나타냅니다. 객체가 죽기 직전에 실행됩니다.