微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我如何确定是否应该使用Idisposable扩展我的一个接口,或者在实现我的接口的类上实现Idisposable?

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

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

-要么-

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

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

解决方法

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

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

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

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

原文地址:https://www.jb51.cc/csharp/96364.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐