【发布时间】:2017-04-08 06:22:41
【问题描述】:
我在理解 IDisposable 接口时遇到了一点问题
我正在开发一个游戏引擎,并对我的解决方案进行了代码分析,并被告知要在我的“GrapicsEngine”类上实现 IDisposable 接口,因为它包含一个位图实例。
当然,我搜索了互联网以了解如何正确执行此操作并想出了以下代码:
这是我的班级成员:
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 区域:
#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
请注意,WindowSurface 是一个 WinForm 面板,GraphicsQuality 是一个枚举,而 Viewport 仅包含 int 值。
所以我只有几个问题:
- 我是否妥善处理了我的资源?
- 我应该在非托管资源方法中处理哪些资源
- 如果我创建一个新类并且它包含我的 GraphicsEngine 类,该类是否也应实现 IDisposable?
我们将不胜感激有关此主题的任何帮助。
【问题讨论】:
标签: c# bitmap game-engine idisposable