c# – 确定IDisposable是否应该扩展接口或在实现所述接口的类上实现

前端之家收集整理的这篇文章主要介绍了c# – 确定IDisposable是否应该扩展接口或在实现所述接口的类上实现前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我如何确定是否应该使用IDisposable扩展我的一个接口,或者在实现我的接口的类上实现IDisposable?

我有一个接口,不需要处理任何外部资源,除了一个特定的实现.我的选择似乎是:

1)在需要所有实现的接口上实现IDisposable来实现Dispose,即使只有一个空的方法.

-要么-

2)仅在需要处理资源的类上实现IDisposable.这将导致“使用”的问题,因为我的对象是从工厂创建的,因此所有上游代码都可以对该接口工作.由于接口未绑定到IDisposable,“使用”不会看到Dispose方法.但是,我可以把工厂的结果付诸实施;然而,这使得消费者意识到实现,击败了接口的目的.

关于最佳做法的任何想法?

解决方法

如果您希望来电者只能与界面交互,并且永远不要执行,那么您希望让接口扩展IDisposable.如果没有,他们将需要检查该值是否是IDisposable,无论是否需要处理.

如果负责处理对象的对象知道具体的实现,并且只有使用该接口的对象被赋予它(但不负责处理),那么请考虑第二个选项.

第一个选项的一个很好的例子是IEnumerator.许多IEnumerator对象在处理时不需要执行任何操作,但有些则执行,因此该接口扩展了IDisposable,因为负责该对象的创建/生命周期的对象将(或应该)不会知道基础实现.

第二个例子就像像IComparer那样需要比较的对象是一次性的,但通过接口使用对象的代码部分对它的创建/生命周期不负任何责任,所以不需要知道是否那种类型是一次性的.

猜你在找的C#相关文章