如何处理类层次结构,其中某些子类是IDisposable而其他子类不是?

时间:2017-06-07 00:29:02

标签: c# idisposable

考虑我有一个基本界面IInterface。我必须使用实现IInterfaceClassAClassB的类。

public interface IInterface
{
}

public class ClassA : IInterface
{
}

public class ClassB : IInterface, IDisposable
{
}

请注意,ClassBIDisposableClassA不是List<IInterface>。现在,如果我想创建一个从工厂填充的List<IDisposable>,我该如何处理一次性元素的处理?是否有必要创建一个单独的IInterface,然后在构造对象时(或构建后)过滤掉列表?我应该IDisposable IDisposable使用带有默认实现的基本抽象类(直到C#7添加默认接口实现)?

我不确定将来最容易使用和最清楚的是什么。似乎将潜在孩子可能被弃用到{{1}}中的所有界面都是一种可能令人烦恼的做法。此外,它需要具有空配置实现的基础,这似乎也不太理想。

1 个答案:

答案 0 :(得分:1)

您必须检查该实例是否实现IDisposable然后调用它。 例如:

    foreach(var item in listOfClasses)
    {
       var disposableItem = item as IDisposable;

       if(disposableItem != null)
          disposableItem.Dispose();

     ....
    }
  

是否需要创建一个单独的List,然后在构造对象时(或构建后)过滤掉列表?

这不是必要的。只需按照您最初说明的方式创建列表,并检查上面显示的一次性物品。

这有帮助吗?