물체를 파괴하는 방법
는 것 같습니다.Set Object = Nothing
파괴하지 않았습니다.Fs
이 코드의 개체:
Sub Test2()
Dim Fs As New FileSystemObject
Set Fs = Nothing
MsgBox Fs.Drives.Count ' this line works
End Sub
마지막 줄은 오류 없이 작동합니다!그것은 의미합니다.Fs
개체가 아직 존재합니다. 그렇죠?
그래서 이것을 파괴하는 방법.Fs
물건.
물체의 적절한 파괴를 보장하는 또 다른 방법은 물체의 참조를 양보하는 것입니다.With
block(즉, 로컬 변수를 선언하지 않음):
Sub Test()
With New FileSystemObject
MsgBox .Drives.Count
End With
End Sub
개체는 항상 내부에만 존재합니다.With
블록, 그리고 실행이 다음에 도달할 때.End With
토큰, 만약 당신이 그것을 사용자 정의 클래스 모듈과 함께 시도한다면 당신은 그 클래스가Class_Terminate
처리기가 실행되어 개체가 제대로 파괴되었는지 효과적으로 확인합니다.
에 대해서는As New
이미 설명했듯이, 만약 당신이 대상 참조를 설정할 의도가 있다면.Nothing
그 범위 내에서, 그것을 선언하지 마세요.As New
VBA가 객체 참조를 설정할 것이기 때문입니다.Nothing
그러나 다시 참조하는 즉시 새 인스턴스를 생성할 수 있습니다("도움이 되는"). 단지 개체를 확인하는 것뿐입니다.Is Nothing
.
참고로, 러버덕의 객체 변수가 자체 할당된 코드 검사라는 추론 뒤에 있는 것은 특히 이 (귀찮게 느껴지는) 직관적이지 않은 행동입니다.
(참고: 검사할 코드가 있는 경우 웹 사이트보다 실제 VBE에서 훨씬 더 빠르게 실행됩니다.)
(이미 명확하지 않은 경우:저는 러버덕 프로젝트에 깊이 관여하고 있습니다.)
대부분 "피해야 할" 패턴으로 처리되는 "피해야 할" 패턴과 관련이 있어야 합니다.
그것들을 나누면, 당신은 얻을 수 있습니다.Nothing
다음으로 설정한 후:
Sub Test2()
Dim Fs As FileSystemObject
Set Fs = New FileSystemObject
Set Fs = Nothing
MsgBox Fs.Drives.Count ' this line DOESN'T work
End Sub
이 수정된 코드는 잘 작동하는 것 같습니다.동일한 라인에서 희미한/새로운 뉘앙스로 보입니다.다른 누군가가 그 추론에 대해 더 나은 아이디어를 줄 수 있기를 바랍니다.
다른 사람들이 언급한 것처럼 서브 내에서 희미한 경우 서브가 완료된 후 수집됩니다.
Sub Test2()
Dim Fs As FileSystemObject
Set Fs = New FileSystemObject
Set Fs = Nothing
End Sub
언급URL : https://stackoverflow.com/questions/42164719/how-to-destroy-an-object
'programing' 카테고리의 다른 글
WPF 단추 텍스트 래핑 스타일 (0) | 2023.06.11 |
---|---|
문자열 및 변수 내용을 동일한 줄에 R로 인쇄 (0) | 2023.06.11 |
SQL을 통해 기능 이미지가 포함된 워드프레스 게시물 검색 (0) | 2023.06.11 |
파이썬에서 "탭"을 어떻게 작성합니까? (0) | 2023.06.11 |
사용자 정의 양식에서 Django 시간/날짜 위젯 사용 (0) | 2023.06.11 |