컨트롤과 Dispose()

C#, .NET 2011. 6. 17. 19:22
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
Posted by 휘사마
,