C#의 모든 컨트롤들은 Control 클래스를 상속받아 만들어지며, IDisposable 을 구현하고 있기 때문에 사라지기 전에 반드시 Dispose() 를 호출해줘야 한다.
한편 Form 의 경우 자신이 가지고 있는 컨트롤들을 Controls 라는 이름의 컬렉션에 보관하는데
Form이 닫힐때 알아서 Controls 에 있는 컨트롤들 각각에 대해 Dispose() 를 호출해주므로 우리가 보통 따로 신경쓸 필요는 없다.
만약 Controls 에 있는 컨트롤을 직접 Remove 하거나 한다면 Remove 후에 Dispose 를 잘 해주어야 할 것이다.
또한 문제는 커스텀 컨트롤을 만들어서 쓸 때인데,
프로젝트에서 Add - User Control 로 만들어서 쓸 때에는 Dispose() 에 대해 달리 신경쓸 필요가 없고,
직접 기존 컨트롤을 상속받아 만들 경우에는 일일히 신경써줘야 한다.(headfirst C# p615~619 참조)
** IDE의 메뉴를 이용해 만든 커스텀 컨트롤을 Controls 에서 직접 Remove 할시 Dispose() 를 호출하면
커스텀 컨트롤이 소유한 컨트롤에 대해서 알아서 Dispose()를 호출해준다.
참고로 커스텀 컨트롤도 toolbox에 자동으로 추가되는데,
Control 클래스를 상속한 클래스를 빌드하면 저절로 추가된다.
** Timer 도 컨트롤이다. Timer를 코드로만 작성해서 썼다면... 반드시 Dispose()를 해주도록 하자.
'C#, .NET' 카테고리의 다른 글
destructor / Dispose() (0) | 2011.06.17 |
---|---|
Form 과 관련된 여러가지 속성 등 (0) | 2011.06.17 |
ref 와 out (0) | 2011.06.17 |
유용한 클래스/스트럭트/메쏘드 (0) | 2011.06.17 |
callback (0) | 2011.06.17 |