나는 약간 문제가구현으로 IDisposable C#
내가 게임 엔진을 개발하고있어 내 솔루션에 코드 분석을 실행하고 내 "GrapicsEngine"클래스에는 IDisposable 인터페이스를 구현했다 되었습니까는 IDisposable 인터페이스를 이해하는 데 문제가 있습니다 Bitmap 인스턴스가 포함되어 있기 때문입니다. 여기
내 클래스 멤버입니다 :private const int BITMAP_WIDTH = 4096;
private const int BITMAP_HEIGHT = 4096;
private Graphics backBuffer;
private Bitmap bitmap;
private Color clearColor;
private WindowSurface surface;
private GraphicsQuality quality;
private Viewport viewport;
여기 내 IDispoable 지역이다
물론, 내가 제대로 이렇게하고 설치하는 방법을 알아 보려면 인터넷을 검색 한 다음 코드를 내놓았다 : WindowSurface가의 WinForm 패널입니다
#region IDisposable
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposing == true)
ReleaseManagedResources();
ReleaseUnmanagedResources();
}
private void ReleaseManagedResources()
{
if (bitmap != null)
bitmap.Dispose();
if (backBuffer != null)
backBuffer.Dispose();
}
private void ReleaseUnmanagedResources()
{
}
~GraphicsEngine()
{
Dispose(false);
}
#endregion
참고 GraphicsQuality는 열거하고 뷰포트에만 INT 값이 포함되어 있습니다.
그래서 난 그냥 몇 가지 질문이 : 내가 제대로 내 자원의 폐기
- 암을?
- 관리되지 않는 리소스 메서드에서 처리해야하는 리소스
- 새 클래스를 만들고 해당 클래스에 내 GraphicsEngine 클래스가 포함되어 있으면 해당 클래스도 IDisposable을 구현해야합니까?
이 주제에 대한 도움을 주시면 감사하겠습니다.
지금은 이해할 수 있습니다. 한가지 마지막 질문 : Sprite 클래스가 있습니다.이 Sprite 클래스에는 공용 getter 및 setter가있는 Bitmap이 포함되어 있습니다.이 호출도 IDisposable을 구현해야하며, 필요한 경우 "sprite.bitmap.Dispose"와 같은 비트 맵을 처리해야합니까? 이미지가 후자입니다. –
코드 부분을 게시하면 알려 드리겠습니다. 일회용 객체를 속성 (getter/setter)을 통해 다시 전달하면 객체 자체는 일회용이며 해당 속성을 사용하는 모든 사용자는 일회용 기능과 함께 사용할 수도 있습니다. 그러나 다시 한 번, 그렇습니다. 클래스 수준에 있기 때문에 클래스에서 구현하고 처리하기를 원합니다. –
감사합니다. 마지막 질문에는 애니메이션 용 프레임 목록이 있는데 프레임에는 비트 맵이 들어 있습니다. 목록을 반복하여 프레임을 처리 할 때 관리되지 않는 리소스를 삭제할 때 내 목록을 삭제해야하는 위치가됩니까? –