[C#] C #에서 함수 이름 앞의 물결표는 무엇을 의미합니까?

몇 가지 코드를보고 있으며 다음과 같은 진술이 있습니다.

~ConnectionManager()
{
    Dispose(false);
}

클래스는 IDisposable인터페이스를 구현 하지만 물결표 (~)가 사용되는지 여부는 알 수 없습니다.



답변

~는 소멸자입니다

  1. 소멸자는 자동으로 호출되며 명시 적으로 호출 할 수 없습니다.
  2. 소멸자는 오버로드 할 수 없습니다. 따라서 클래스는 최대 하나의 소멸자를 가질 수 있습니다.
  3. 소멸자는 상속되지 않습니다. 따라서 클래스에는 선언 된 클래스 이외의 소멸자가 없습니다.
  4. 소멸자는 구조체와 함께 사용할 수 없습니다. 클래스에만 사용됩니다. 더 이상 코드를 사용할 수없는 인스턴스는 소멸 될 수 있습니다.
  5. 인스턴스의 소멸자 실행은 인스턴스가 소멸 될 수있는 시점 이후 언제라도 발생할 수 있습니다.
  6. 인스턴스가 소멸되면 상속 체인의 소멸자가 가장 많이 파생 된 것부터 가장 덜 파생 된 것까지 순서대로 호출됩니다.

마무리

C #에서 Finalize 메서드는 표준 C ++ 소멸자가 수행하는 작업을 수행합니다. C #에서는 이름을 Finalize로 지정하지 않습니다. 클래스 이름 앞에 물결표 (~) 기호를 배치하는 C ++ 소멸자 구문을 사용합니다.

처분

클래스의 사용자가 명시 적으로 호출 할 수 있는 Close()또는 Dispose()메서드 에 객체를 처리하는 것이 좋습니다 . GC는 최종화 (소멸자)를 호출합니다.

는 IDisposable 인터페이스는 클래스가 배치 될 필요 자원을 점유하고 사용자에게이를 해제 할 수있는 방법을 제공하는 세계를 알려줍니다. 클래스에서 종료자를 구현해야하는 경우 Dispose 메소드 GC.SuppressFinalize()메소드를 사용 하여 인스턴스의 종료가 억제되도록해야합니다.

무엇을 사용해야합니까?

소멸자를 명시 적으로 호출하는 것은 합법적이지 않습니다. 가비지 수집기에서 소멸자를 호출합니다. 닫고 처리하려는 귀중한 관리되지 않는 리소스 (예 : 파일 핸들)를 가능한 한 빨리 처리하려면 IDisposable 인터페이스를 구현해야합니다.


답변

이것은 파이널 라이저 입니다. 솔직히 말해서 파이널 라이저를 작성할 필요는 거의 없습니다. 다음과 같은 경우 실제로 하나만 작성하면됩니다.

  • 관리되지 않는 리소스 (예 :)를 통해 직접 액세스 IntPtr할 수 SafeHandle있으며 더 쉽게 사용할 수 없습니다.
  • IDisposable봉인되지 않은 클래스에서 구현 하고 있습니다. (내가 선호하는 것은 클래스가 상속 용으로 설계되지 않은 한 클래스를 봉인하는 것입니다.) 이러한 경우 종료자는 정규 Dispose 패턴의 일부입니다.

답변

클래스의 소멸자를 표시하는 데 사용됩니다.


답변

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


답변

소멸자 (C # 프로그래밍 안내서)를 참조하십시오 . 그러나 C ++과는 달리 프로그래머는 가비지 수집기에 의해 결정되므로 소멸자가 호출되는 시점을 제어 할 수 없습니다.


답변

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

여기 내가 찾은 C # 해체 자에 대한 설명이 있습니다.


답변