문제
가능한 복제 :
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#에 대한 단서가 없지만 코드가하는 일에서 이것은 해체자처럼 보입니다.
- 참조 된 리소스를 무료로 사용하십시오
handle
- 세트
handle
에게0
확인하기
"아님"이라는 개념과 함께 갈 것입니다 ... :)
그래도 틀릴 수도 있습니다 ...
인사
back2dos