4

これらの3つのクラスがあるとしましょう。

abstract class MyBase
{
    //some base code here
}

class Foo : MyBase, IDisposable
{
    //got at least a field I should dispose
}

class Bar : MyBase, IDisposable
{
    //got at least a field I should dispose
}

そんなクラスがいくつかあります。を所有するクラスを取得しましたList<base>。適切なタイプを取得するためにテスト/キャストすることなく、これらすべてのクラスを適切に破棄するにはどうすればよいDisposeですか?

4

2 に答える 2

8

よく使用できます:

foreach (var disposable in list.OfType<IDisposable>())
{
    disposable.Dispose(); 
}

ただし、この種のクラス階層を持つことは一般的に悪い考えだと思います。MyBaseこれは、特定のタイプの追加のコントラクトがあるため、クライアントが「の任意のインスタンス」を同じように使用できないことを意味します。たとえいくつかの特定の型が実際にはそれを必要としなかったとしても、それをBase実装する方がきれいでしょう。IDisposable

于 2013-08-14T12:38:04.960 に答える