在C#中,如果某个类(如经理类)没有资源,那么拥有它有什么好处: IDisposable
吗?
简单的例子:
public interface IBoxManager
{
int addBox(Box b);
}
public class BoxManager : IBoxManager
{
public int addBox(Box b)
{
using(dataContext db = new dataContext()){
db.Boxes.add(b);
db.SaveChanges();
}
return b.id;
}
}
Run Code Online (Sandbox Code Playgroud)
使用BoxManager时,如果它还实现了IDisposable,那么内存使用会有什么好处吗? public class BoxManager : IBoxManager , IDisposable
例如:
BoxManager bm = new BoxManager();
bm.add(myBox);
bm.dispose();//is there benefit to doing this?
Run Code Online (Sandbox Code Playgroud)
Jar*_*Par 72
在IDisposable
类型上实现只有两个原因
IDisposable
如果这些都不是真的那么就不要实施 IDisposable
编辑
有几个人提到这IDisposable
是实现开始/结束或预订操作的好方法.虽然这不是它的原始意图IDisposable
确实提供了一个非常好的模式.
class Operation {
class Helper : IDisposable {
internal Operation Operation;
public void Dispose() {
Operation.EndOperation();
}
}
public IDisposable BeginOperation() {
...
return new Helper() { Operation = this };
}
private void EndOperation() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
注意:实现此模式的另一种有趣方式是使用lambdas.而不是IDisposable
回馈用户并希望他们不忘记打电话Dispose
给他们一个lambda,他们可以在其中执行操作并关闭操作
public void BeginOperation(Action action) {
BeginOperationCore();
try {
action();
} finally {
EndOperation();
}
}
Run Code Online (Sandbox Code Playgroud)
虽然您的代码不会从实现IDisposable中受益,但我不同意其他意见,其中声明IDisposable仅用于(直接或间接)释放本机资源.只要对象需要在其生命周期结束时执行清理任务,就可以使用IDisposable.它非常有用using
.
一个非常流行的例子:在ASP.NET MVC中Html.BeginForm
返回一个IDisposable.在创建时,对象打开标记,当调用Dispose时它会关闭它.没有涉及本地资源,但仍然很好地使用IDisposable.
归档时间: |
|
查看次数: |
4593 次 |
最近记录: |