私は少し問題実装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領域は次のとおりです。
#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を実装する必要がありますか?
このトピックに関するお手伝いをいただければ幸いです。
私は今理解していると思います。ただ1つの最後の質問:Spriteクラスがあります。このクラスには、getterとsetterを持つビットマップが含まれています。これはIDisposableを実装する必要がありますか、必要なときには "sprite.bitmap.Dispose"私は後者のイメージです。 –
コードの部分を掲示しておきます。使い捨てオブジェクトをプロパティ(getter/setter)に戻すと、オブジェクト自体は使い捨てであり、そのプロパティを使用するすべてのユーザーは、使い捨て機能とともに使用することもできます。しかし、再び、はい、それはクラスレベルにあるので、それをあなたのクラスに実装して処分したいと思っています。 –
私は今理解していると思う。最後の質問の1つに、アニメーション用のフレームのリストがあり、フレームにビットマップが含まれています。フレームを廃棄するとき(リストを反復することによって)、管理されていないリソースを処分することになると、これは私のリストをクリアすべき場所になりますか? –