c# – 处理所有实现IDisposable的嵌套对象
发布时间:2020-12-16 01:48:26 所属栏目:百科 来源:网络整理
导读:我的项目中有以下代码.我是否必须明确处理内部类?如果是这样的话? public class Outer : IDisposable{ Context context = new Context(); Inner inner; public Outer() { inner = new Inner(context); } public void Dispose() { context.Dispose(); }}pub
我的项目中有以下代码.我是否必须明确处理内部类?如果是这样的话?
public class Outer : IDisposable { Context context = new Context(); Inner inner; public Outer() { inner = new Inner(context); } public void Dispose() { context.Dispose(); } } public class Inner : IDisposable { Context context; public Inner(Context context) { this.context = context; } public void Dispose() { context.Dispose(); } } Context类似于Entity Framework中的DbContext. 解决方法
那么,在这种情况下,你需要找出实际应该“拥有”上下文的内容.如果你在内心得到它,你真的需要它在外面吗?他们中哪一个真的对他们负责?它看起来像你真的想要:
public sealed class Outer : IDisposable { private readonly Inner inner; public Outer() { inner = new Inner(new Context()); } public void Dispose() { inner.Dispose(); } } public sealed class Inner : IDisposable { private readonly Context context; public Inner(Context context) { this.context = context; } public void Dispose() { context.Dispose(); } } 注意,已经将外部和内部密封,没有必要编写受保护的Dispose(bool处理)方法等 – 这实际上是继承,这一般会变得很痛苦.如果你真的需要将Outer和Inner子类化为需要处理更多资源的可能性,那么你需要一个更复杂的实现. 我个人尽量不尝试实现IDisposable,并且只使用using语句将一次性事物保存在局部变量中.当然,这并不总是可行,但值得尝试…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- postgresql常用的查询语句
- ruby-on-rails – Model / ActiveRecord不保存新数据
- Flash使用遮罩后动态文字不显示的解决方法
- ruby-on-rails – Windows上的Docker“无法找到Gemfile”
- 在AIR下,用Actionscript3.0 输出日志到外部文件
- WCF部署时的异常错误“System.BadImageFormatException: 未
- postgresql – 在View上执行触发器?
- SQLite数据库实际运用
- xcode – 即使在simultor未运行后显示“正在使用的模拟器”
- c# – “ceq”MSIL命令和object.InternalEquals之间的区别