4

この質問に対する答えが見つかりませんでした。

好奇心から、以前のバージョンでは実装されていなかったXmlNodeList クラスが .NET 4.5 で IDisposable を実装するのはなぜですか?

4

1 に答える 1

1

IEnumerator<T>実装するのと同じ理由である可能性が高いですが、以前のバージョンは、実装IDisposableIEnumeratorクリーンアップを必要とする可能性がある状況を作成者が考える前に作成されましたが、そのような実装を返すファクトリはそのような必要性を知らない可能性があります。たとえば、クラスがファイル名を受け入れ、XmlNodeListそのファイルから「ライブ」を提供する場合があります。のIDisposable.DisposeメソッドはXmlList、基になるファイルを閉じます。インターフェイスまたは抽象クラスのユーザーのかなりの部分が次のようなコードを使用する必要がある場合:

IDisposable asDispos = thing as IDisposable;
if (asDispos != null)
  asDispos.Dispose();

そして、そうでないものの多くがそうすべきであるなら、それはおそらくそれ自体を実装するべきです。なぜなら、実装するかもしれないし、しないかもしれないクラスをキャストしようとするよりも、実装することが知られているクラスをIDisposable無条件に呼び出す方が速いからです。IDisposable.DisposeIDisposableIDisposable.Dispose

于 2013-01-21T19:02:29.197 に答える