문제

가능한 복제 :
c#에서 tilde (~)는 무엇을 의미합니까?

class ResourceWrapper
{
    int handle = 0;
    public ResourceWrapper()
    {
        handle = GetWindowsResource();
    }
    ~ResourceWrapper()                     //this line here
    {
        FreeWindowsResource(handle);
        handle = 0;
    }
    [DllImport("dll.dll")]
    static extern int GetWindowsResource();
    [DllImport("dll.dll")]
    static extern void FreeWindowsResource(int handle);
}

틸데는 라인에서 무엇을 하는가?

나는 그것이 비트가 아닌 연산자라고 생각했고, 사실 나는 전체 블록, (주석은 선과 괄호가 그 뒤에 blovk)를 이해하지 못한다고 생각했다. 그리고 왜 그 전에 틸데가 있습니까?

도움이 되었습니까?

해결책

그건 폐물 소각로. 모든 자원이 쓰레기 수집시 출시되도록주의를 기울여야합니다.

다른 팁

이것은 클래스의 최종화기 (최종 방법)를 구현합니다. 일반적으로 최종화기를 구현해서는 안됩니다.

예를 들어 외부 관리되지 않은 리소스를 보유한 클래스에 대해서는이 작업을 수행하지만이 경우에도 IDISPosable 패턴도 구현해야합니다.

C ++처럼 ~ClassName 소멸자 방법입니다. 문제의 물체가 쓰레기 수집기에 의해 청소되면 C#에서 호출됩니다. Destructor가 호출되는 결정 론적 시간이있는 C ++와 달리 C#에서 호출 될시기 (또는 호출 될 경우)를 예측할 방법이 없습니다.

당신이 아마 찾고있는 것은 IDisposable 패턴은 이것에 훨씬 더 나은 접근 방식을 제공합니다.

그것은 폐물 소각로. 그것은 당신에게 자원 방출에 대한 암시 적 제어를 제공합니다. 즉, 그것은 다음에 의해 호출됩니다 쓰레기 수집가. 자원 릴리스를 명시 적으로 제어하려면 구현할 수 있습니다. idisposable 체크 아웃 관리되지 않는 자원을 정리하기 위해 최종 및 처분을 구현합니다. 그만큼 프레임 워크 설계 지침 또한 더 많은 정보가 있습니다.

ACK, 방금 답을 찾았고 내 질문을 삭제하는 방법을 알 수 없습니다. 클래스의 소멸자를 지정합니다

나는 C#에 대한 단서가 없지만 코드가하는 일에서 이것은 해체자처럼 보입니다.

  1. 참조 된 리소스를 무료로 사용하십시오 handle
  2. 세트 handle 에게 0 확인하기

"아님"이라는 개념과 함께 갈 것입니다 ... :)

그래도 틀릴 수도 있습니다 ...

인사

back2dos

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