![]() |
1
4
@Jon Skeet 有 answered the 问题真的很好,但让我插句话,我觉得应该是自己的答案。
使用
为了使代码对使用它的程序员更明显,您应该考虑使用一个临时值,
让我举个例子。 而不是这个:
您可以这样做:
因此,你不会再处理任何东西了,因为
下面是一个示例实现(未验证,从内存键入):
这允许您执行以下操作:
我返回一个结构,而不是
|
![]() |
2
5
这还不完全清楚 IDisposable.Dispose 文档,其中包括(强调我的):
但这也是:
后者表明 不应该 用于“重置”类型的操作,这是我认为你需要的。(我不确定您的“进入睡眠”术语是否真的有帮助;我说的对吗?您是否真的在处理所有子节点中的所有主动获得的资源?) 当然,这只是惯例-你 可以 让你的代码随心所欲。但是,我认为大多数开发人员会觉得这有点奇怪。 我知道你想做什么,但我不确定最好的方法… |
![]() |
3
2
我会说,“不”。
|
![]() |
4
1
当然,如果没有资源,就不应该释放它们,因此在这种情况下,Dispose方法将不做任何事情。 也许,您应该使用一个内部具有IDisposable的复合对象,并在此属性/字段中分配/释放资源。因此,当节点处于活动状态时,您将唤醒(使用资源分配新对象)并进入睡眠状态(释放资源)。 在这种情况下,Steel需要从IDisposable派生您的节点,因为当您具有IDisposable的属性/字段时,容器也应该实现IDisposable。 |
![]() |
5
1
不,这似乎不适合使用IDisposable。 快速考虑您可以做什么;实现另一个IDisposable对象,该对象可以包含加载的数据,并从对象的方法调用返回该数据;例如:
|
![]() |
6
1
听起来你只需要再加一个 level of indirection .
这里混淆的是物体的生命周期。一方面,你有一个长寿的物体(
因此,听起来您有两个生命周期概念,可以通过引入另一个对象来更直接地管理资源来建模这些概念。
所以,把你的“懒惰获取的资源”放进新的资源管理对象中,这个对象本身就热切地获取资源,并将它们配置到
|
![]() |
Emopusta · 从后端到前端的图像路径不工作 2 年前 |
![]() |
Asdrubal Hernandez · Linq查询特定数组索引出错 2 年前 |
![]() |
Niyazi Babayev · 如何在表达式中动态应用表达式? 3 年前 |
|
Dansih · .Net核心自定义身份验证方案 3 年前 |
![]() |
lolorekkk · 面板插入。NET WinForm 3 年前 |