私はan OSS projectに取り組んでいます。人気のあるMediaInfo libraryを.NETで使いやすくしていますが、この質問は一般化可能です。どのクラスがアンマネージリソースを所有していますか(そしてIDisposableを実装していますか?)
派生クラスDは常にオブジェクトOその基底クラスDBのコンストラクタを呼び出すインスタンス化する場合。 DBは、コンストラクタに送られたものにその値を設定し、その値自体はで宣言されDBの基本クラスB:
以下のコードで O(AKA MediaInfoをを 『所有』- )?
- .NETアプリケーションの場合、これらのうちどれがIDisposableを実装する必要がありますか? 注:Oは管理されていないか、少なくともアンマネージライブラリをラップした管理対象オブジェクトのインスタンスですが、 "MediaInfo.Close();"の形式でクリーンアップする必要があります。私はこのことが「管理されていない」とは確信していません。
私は実際のコードを使用させ、明確に支援するため:はDB由来
D:Bに由来するそのO継承を設定
// MediaFile is "D"
public sealed class MediaFile : GeneralStream
{
public MediaFile(string filePath)
: base(new MediaInfo(), 0) {
// mediaInfo is "O"
mediaInfo.Open(filePath);
}
}
DBを:
// GeneralStream is "DB"
public abstract class GeneralStream : StreamBaseClass
{
public GeneralStream(MediaInfo mediaInfo, int id) {
this.mediaInfo = mediaInfo; // declared in StreamBaseClass
// ...
}
}
BはOを宣言:
// StreamBaseClass is "B"
public abstract class StreamBaseClass
{
protected MediaInfo mediaInfo; // "O" is declared
// ...
}
異なる 'Stream'タイプは既に' IDisposable'を実装しています - これは、それらのいずれかから継承するクラスがこの実装を継承することを意味します。 – Oded
@Oded、私は質問の中のストリームが何か異なっていると思います。彼らは 'System.IO.Stream'から継承しません。 – svick
@svick - 私は同意しますが、BCLの 'Stream'とそれに関連する型はインタフェースを実装していると指摘しました。 – Oded