【发布时间】:2012-05-17 20:12:23
【问题描述】:
从以下情况开始:
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 来释放资源。 您可以通过两种方式解决此问题:
1.在类 SampleA 中添加所需的接口:
public class SampleA : ISample, IDisposable
{
// has some (unmanaged) resources that needs to be disposed
}
2。将其添加到接口 ISample 并强制派生类实现它:
public interface ISample : IDisposable
{
}
如果你把它放到接口中,你会强制任何实现实现 IDisposable,即使它们没有什么可处置的。另一方面,很清楚地看到接口的具体实现需要一个 dispose/using 块,并且您不需要强制转换为 IDisposable 进行清理。两种方式可能都有更多的优点/缺点......您为什么建议使用一种优于另一种的方式?
【问题讨论】:
-
针对接口编写的代码(大概是已构建的实例)负责结束该实例的(有用)生命周期的可能性有多大?
-
@Damien_The_Unbeliever:好的,假设 ISample 来自工厂方法结果或通过依赖注入。
-
就是这样 - 如果它是来自工厂,那么您的代码可能负责处理 - 所以我会把它放在接口。但如果它被注入,那么我假设注入器也负责生命周期,所以它不会适合界面 - 我不认为有一个万能的回答问题。
标签: c# .net dispose idisposable