C # UserControl에 Dispose 기능을 어떻게 추가합니까?
UserControl을 구현하는 클래스가 있습니다. .NET 2005에서 Dispose 메서드는 다음과 같은 MyClass.Designer.cs 부분 클래스 파일에 자동으로 생성됩니다.
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
고유 한 Dispose 기능을 추가하려면 어디에 두어야합니까? 이 파일이 생성 되었기 때문에 여기에 코드를 추가하고 날아갈 위험이 없습니다.
이 경우 생성 된 Dispose
메서드를 기본 파일로 이동하고 확장합니다. Visual Studio는이를 존중합니다.
다른 방법은 부분 메서드 (C # 3.0)를 사용하는 것입니다.
모든 Component
클래스는 Disposed
이벤트를 구현합니다 . 해당 이벤트에 대한 이벤트 처리기를 추가하고 거기에서 항목을 정리할 수 있습니다.
예를 들어, UserControl
다음 방법을 추가 할 수 있습니다.
private void OnDispose(object sender, EventArgs e)
{
// do stuff on dispose
}
생성자 (또는 Load
이벤트 핸들러)에서 다음 줄을 추가합니다.
Disposed += OnDispose;
이 경우 코드 생성기가 귀하의 코드를 존중한다고 생각합니다. 코드 숨김에 넣어도 안전해야합니다.
VS 2005 (및 2008)에서는 Dispose
메서드를 업데이트 할 수 있으며 디자이너에서 컨트롤을 편집 할 때 제거되지 않습니다.
원하는 경우 .designer.cs 파일에서 기본 .cs 파일로 이동할 수 있습니다. 이미 말했듯이 덮어 쓰지 않습니다.
사용자 컨트롤이 상속하는 구성 요소 클래스의 public void Dispose () 메서드를 오버로드하면됩니다.
기본 메서드에 대한 호출을 전달하고 기능적으로 처리를 수행하는지 확인하십시오. 그렇지 않으면 완전히 구현하지 않는 한 기능이 중단됩니다.
가장 깨끗한 방법은 컨트롤이 자체 Disposed () 이벤트를 구독하고 거기에서 정리를 수행하는 것입니다.
정리하는 데 사용할 수있는 UserControl에 대한 Unloaded 이벤트가 있습니다.
'IT TIP' 카테고리의 다른 글
WKWebView로 마이그레이션하는 방법? (0) | 2020.12.10 |
---|---|
Maven 체크 스타일 비활성화 (0) | 2020.12.10 |
Ruby on Rails에서 연결을 통해 has_many를 어떻게 주문합니까? (0) | 2020.12.10 |
기본 생성자없이 객체 배열 초기화 (0) | 2020.12.10 |
JSF 2.0에서 세션을 무효화하는 방법은 무엇입니까? (0) | 2020.12.10 |