c# - 为类或接口(interface)声明 IDisposable?

标签 c# .net dispose idisposable

从以下情况开始:

public interface ISample
{
}

public class SampleA : ISample
{
   // has some (unmanaged) resources that needs to be disposed
}

public class SampleB : ISample
{
   // has no resources that needs to be disposed
}

类 SampleA 应该实现 IDisposable 接口(interface)来释放资源。 您可以通过两种方式解决此问题:

<强>1。将需要的接口(interface)添加到类 SampleA 中:

public class SampleA : ISample, IDisposable
{
   // has some (unmanaged) resources that needs to be disposed
}

<强>2。将它添加到接口(interface) ISample 并强制派生类实现它:

public interface ISample : IDisposable
{
}

如果将它放入接口(interface)中,则强制任何实现实现 IDisposable,即使它们没有任何可处置的。另一方面,可以很清楚地看到接口(interface)的具体实现需要一个 dispose/using block ,您不需要转换为 IDisposable 来进行清理。这两种方式可能都有更多的优点/缺点...为什么您会建议使用一种方式而不是另一种方式?

最佳答案

Inteface Segregation Principle 之后的 SOLID如果您将 IDisposable 添加到接口(interface)中,您将向不感兴趣的客户端提供方法,因此您应该将其添加到 A。

除此之外,接口(interface)永远不会是一次性的,因为可丢弃性与接口(interface)的具体实现有关,而不是与接口(interface)本身有关。

任何接口(interface)都可以在有或没有需要释放的元素的情况下实现。

关于c# - 为类或接口(interface)声明 IDisposable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10513948/

相关文章:

c# - 由于 NativeWindow,如何修复 Excel VSTO 项目中的 ThreadAbortException?

c# - ITextSharp 在 PDF 中重复 HTML 表头

.net - 写一个更好的自然排序(比我的)

.net - Silverlight 与 Flex

.net - 我需要处理任务吗?

c# - 为什么我不能有一个从内部类继承的公共(public)类?

c# - 如何创建 public String Replace with 4 种方法

c# - SQL Server 中是否有 Oracle 数组绑定(bind)的等效功能?

.net - C# 无法访问已释放的对象

java - 在 Java 中,如何检查 AutoCloseable.close() 是否已被调用?